Trong PostgreSQL, Định dạng dấu thời gian độc lập với lưu trữ. Một câu trả lời là sử dụng to_char
và định dạng dấu thời gian thành bất kỳ định dạng nào bạn cần tại thời điểm bạn cần, như sau:
select to_char(current_timestamp, 'yyyy-MM-dd HH24:MI:SS.MS');
select to_timestamp('2012-10-11 12:13:14.123',
'yyyy-MM-dd HH24:MI:SS.MS')::timestamp;
Nhưng nếu bạn phải đặt định dạng mặc định:
Thay đổi định dạng dấu thời gian postgresql trên toàn cầu:
Hãy xem múi giờ của bạn, chạy cái này dưới dạng truy vấn sql:
show timezone
Result: "US/Eastern"
Vì vậy, khi bạn đang in ra current_timestamp, bạn sẽ thấy như sau:
select current_timestamp
Result: 2012-10-23 20:58:35.422282-04
-04
ở cuối là múi giờ của bạn so với UTC. Bạn có thể thay đổi múi giờ của mình bằng:
set timezone = 'US/Pacific'
Sau đó:
select current_timestamp
Result: 2012-10-23 18:00:38.773296-07
Vì vậy, hãy chú ý đến -07
ở đó, điều đó có nghĩa là chúng tôi Thái Bình Dương cách UTC 7 giờ. Làm cách nào để biến mất múi giờ khó coi đó? Một cách chỉ là tạo một bảng, nó được đặt mặc định là dấu thời gian không có múi giờ:
CREATE TABLE worse_than_fail_table
(
mykey INT unique not null,
fail_date TIMESTAMP not null
);
Sau đó, nếu bạn thêm dấu thời gian vào bảng đó và chọn từ đó
select fail_date from worse_than_fail_table
Result: 2012-10-23 21:09:39.335146
yay, không có múi giờ ở cuối. Nhưng bạn muốn kiểm soát nhiều hơn cách dấu thời gian hiển thị theo mặc định! Bạn có thể làm điều gì đó như sau:
CREATE TABLE moo (
key int PRIMARY KEY,
boo text NOT NULL DEFAULT TO_CHAR(CURRENT_TIMESTAMP,'YYYYMM')
);
Đó là trường văn bản cho phép bạn kiểm soát nhiều hơn cách nó hiển thị theo mặc định khi bạn thực hiện select somecolumns from sometable
. Lưu ý rằng bạn có thể truyền một chuỗi tới dấu thời gian:
select '2012-10-11 12:13:14.56789'::timestamp
Result: 2012-10-11 12:13:14.56789
Bạn có thể truyền một current_timestamp thành timestamp
sẽ xóa múi giờ:
select current_timestamp::timestamp
Result: 2012-10-23 21:18:05.107047
Bạn có thể loại bỏ múi giờ như sau:
select current_timestamp at time zone 'UTC'
Result: "2012-10-24 01:40:10.543251"
Nhưng nếu bạn thực sự muốn múi giờ quay trở lại, bạn có thể làm điều này:
select current_timestamp::timestamp with time zone
Result: 2012-10-23 21:20:21.256478-04
Bạn có thể rút ra những gì bạn muốn với trích xuất:
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 20
Và sự quái dị này:
SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'EST';
Result: 2001-02-16 20:38:40