PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

trong postgres, bạn có thể đặt định dạng mặc định cho dấu thời gian, theo phiên hoặc toàn cầu không?

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt trình điều khiển PDO cho PostgreSQL trên Mac (sử dụng Zend cho eclipse)

  2. Postgresql json like truy vấn

  3. Cách ánh xạ PostgreSQL enum với JPA và Hibernate

  4. Quản lý một Bản cam kết PostgreSQL

  5. 2 cách liệt kê tất cả các trình kích hoạt trong cơ sở dữ liệu PostgreSQL