Trong PostgreSQL, make_interval()
hàm tạo khoảng thời gian từ các trường năm, tháng, tuần, ngày, giờ, phút và giây.
Bạn cung cấp các trường năm, tháng, tuần, ngày, giờ, phút và / hoặc giây và nó sẽ trả về một khoảng thời gian trong khoảng thời gian kiểu dữ liệu.
Cú pháp
Hàm có cú pháp sau:
make_interval(years int DEFAULT 0, months int DEFAULT 0, weeks int DEFAULT 0, days int DEFAULT 0, hours int DEFAULT 0, mins int DEFAULT 0, secs double precision DEFAULT 0.0)
Ví dụ
Đây là một ví dụ để chứng minh.
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Kết quả:
1 year 2 mons 25 days 05:06:07
Trong ví dụ này, tôi đã cung cấp tất cả bảy đối số.
Đây là cơ chế truyền thống để chuyển các đối số đến các hàm trong PostgreSQL và nó được gọi là “ký hiệu vị trí”.
Khi sử dụng ký hiệu vị trí, tất cả các đối số được chỉ định theo thứ tự.
Ký hiệu được đặt tên
Dưới đây là một ví dụ sử dụng ký hiệu được đặt tên.
SELECT make_interval(days => 12);
Kết quả:
12 days
Trong ví dụ này, tôi sử dụng ký hiệu được đặt tên để chỉ định một đối số. Điều này giúp tôi không phải nhập tất cả các đối số, chỉ để chỉ định số ngày.
Tất cả các đối số mặc định bằng 0, vì vậy, không có tác động tiêu cực nào bằng cách bỏ qua chúng.
Đây là những gì sẽ xảy ra nếu tôi không sử dụng ký hiệu được đặt tên khi chỉ định một đối số.
SELECT make_interval(12);
Kết quả:
12 years
Nó cho rằng tôi có nghĩa là 12 năm.
Điều tốt về ký hiệu được đặt tên là bạn có thể cung cấp bao nhiêu đối số tùy thích và không cần thêm nữa.
Ví dụ:
SELECT make_interval(months => 10, days => 5, mins => 47);
Kết quả:
10 mons 5 days 00:47:00
Ký hiệu được đặt tên kế thừa
Các phiên bản cũ hơn của Postgres sử dụng một cú pháp hơi khác cho ký hiệu được đặt tên. Cú pháp này sử dụng :=
thay vì =>
.
Ví dụ:
SELECT make_interval(days := 12);
Kết quả:
12 days
Kể từ Postgres 12, cú pháp này vẫn hoạt động để tương thích ngược.
Tuần và Ngày
Với khoảng Postgres, tuần được biểu thị dưới dạng ngày. Vì vậy, nếu bạn chỉ định weeks
đối số, kết quả sẽ có sau vài ngày.
SELECT make_interval(weeks => 2);
Kết quả:
14 days
Do đó, nếu bạn cũng chỉ định days
đối số, nó sẽ được thêm vào những ngày được tạo bởi weeks
đối số.
SELECT make_interval(weeks => 2, days => 3);
Kết quả:
17 days
Kiểu đầu ra khoảng thời gian
Trong Postgres, định dạng đầu ra của kiểu khoảng có thể được đặt thành một trong bốn kiểu khoảng sau:
-
sql_standard
-
postgres
-
postgres_verbose
-
iso_8601
Bạn có thể đặt điều này bằng cách sử dụng SET intervalstyle
. Mặc định là postgres
định dạng.
Các ví dụ trước đều sử dụng định dạng mặc định (postgres
).
Dưới đây là một ví dụ minh họa đầu ra của make_interval()
khi sử dụng các kiểu đầu ra khác nhau.
sql_standard
SET intervalstyle = 'sql_standard';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Kết quả:
+1-2 +25 +5:06:07
postgres
Đây là cài đặt mặc định.
SET intervalstyle = 'postgres';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Kết quả:
1 năm 2 gió 25 ngày 05:06:07
postgres_verbose
SET intervalstyle = 'postgres_verbose';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Kết quả:
@ 1 year 2 mons 25 days 5 hours 6 mins 7 secs
iso_8601
SET intervalstyle = 'iso_8601';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Kết quả:
P1Y2M25DT5H6M7S