Trong PostgreSQL, make_timestamp()
cho phép bạn tạo dấu thời gian từ các trường năm, tháng, ngày, giờ, phút và giây của nó.
Cú pháp
Hàm có cú pháp sau:
make_timestamp(year int, month int, day int, hour int, min int, sec double precision)
year
, month
và day
là các số nguyên đại diện cho năm, tháng và ngày trong ngày và hour
là phần giờ, min
là phần phút và sec
là phần giây.
Giờ và phút được cung cấp dưới dạng số nguyên , giây được cung cấp dưới dạng độ chính xác kép .
Kết quả được trả về dưới dạng dấu thời gian . Chính xác hơn, nó được trả về là thời gian không có múi giờ .
Ví dụ
Đây là một ví dụ cơ bản để chứng minh.
SELECT make_timestamp(2020, 10, 25, 9, 30, 17.12);
Kết quả:
2020-10-25 09:30:17.12
Và chúng tôi có thể xác minh kiểu trả về bằng truy vấn sau.
SELECT pg_typeof(make_timestamp(2020, 10, 25, 9, 30, 17.12));
Kết quả:
timestamp without time zone
pg_typeof()
hàm trả về kiểu dữ liệu của đối số của nó và vì vậy tôi đã chuyển make_timestamp()
như đối số ..
Ngoài phạm vi
Nếu bất kỳ đối số nào nằm ngoài phạm vi giá trị có thể có cho phần ngày của nó, bạn sẽ gặp lỗi "nằm ngoài phạm vi".
SELECT make_timestamp(2020, 13, 25, 9, 30, 17.12);
Kết quả:
ERROR: date field value out of range: 2020-13-25
Trong trường hợp này, tháng nằm ngoài phạm vi và do đó, thông báo giải thích rằng giá trị trường ngày nằm ngoài phạm vi.
Nếu chỉ có giá trị trường thời gian nằm ngoài phạm vi, lỗi sẽ được xử lý tương ứng.
SELECT make_timestamp(2020, 10, 25, 25, 30, 17.12);
Kết quả:
ERROR: time field value out of range: 25:30:17.12
Truyền chuỗi làm đối số
Tài liệu Postgres nói rằng các đối số phải là số nguyên (và độ chính xác gấp đôi trong trường hợp của seconds
), nhưng việc chuyển các chuỗi cũng hoạt động (có thể vì chúng được chuyển đổi ngầm thành số nguyên), miễn là mỗi đối số nằm trong phạm vi thích hợp của nó.
SELECT make_timestamp('2020', '12', '25', '10', '30', '17.12');
Kết quả:
2020-12-25 10:30:17.12
Một lần nữa, chúng ta có thể sử dụng pg_type()
để kiểm tra kiểu dữ liệu kết quả.
SELECT pg_typeof(make_timestamp('2020', '12', '25', '10', '30', '17.12'));
Kết quả:
timestamp without time zone
Tuy nhiên, bạn vẫn cần đảm bảo rằng mỗi đối số sẽ hợp lệ sau khi được chuyển đổi thành số nguyên, nếu không, bạn sẽ gặp lỗi.
SELECT pg_typeof(make_timestamp('2020', '13', '25', '10', '30', '17.12'));
Kết quả:
ERROR: date field value out of range: 2020-13-25
Dấu thời gian có múi giờ
Để tạo dấu thời gian với múi giờ giá trị, sử dụng make_timestamptz()
chức năng.