PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

di postgres, dapatkah Anda mengatur pemformatan default untuk stempel waktu, berdasarkan sesi atau secara global?

Di PostgreSQL, Pemformatan cap waktu tidak tergantung pada penyimpanan. Salah satu jawabannya adalah dengan menggunakan to_char dan format stempel waktu ke format apa pun yang Anda butuhkan saat Anda membutuhkannya, seperti ini:

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;

Tetapi jika Anda harus mengatur format default:

Ubah format cap waktu postgresql secara global:

Lihatlah zona waktu Anda, jalankan ini sebagai kueri sql:

show timezone
Result: "US/Eastern"

Jadi ketika Anda mencetak current_timestamp, Anda melihat ini:

select current_timestamp
Result: 2012-10-23 20:58:35.422282-04

-04 pada akhirnya adalah zona waktu Anda relatif terhadap UTC. Anda dapat mengubah zona waktu dengan:

set timezone = 'US/Pacific'

Kemudian:

select current_timestamp
Result: 2012-10-23 18:00:38.773296-07

Jadi perhatikan -07 di sana, itu berarti kita Pasifik berjarak 7 jam dari UTC. Bagaimana cara menghilangkan zona waktu yang tidak sedap dipandang itu? Salah satu caranya adalah dengan membuat tabel, defaultnya adalah stempel waktu tanpa zona waktu:

CREATE TABLE worse_than_fail_table
(
    mykey          INT unique not null,
    fail_date      TIMESTAMP not null
);

Kemudian jika Anda menambahkan stempel waktu ke tabel itu dan memilihnya

select fail_date from worse_than_fail_table
Result: 2012-10-23 21:09:39.335146

yay, tidak ada zona waktu di akhir. Tetapi Anda ingin kontrol lebih besar atas bagaimana stempel waktu muncul secara default! Anda dapat melakukan sesuatu seperti ini:

CREATE TABLE moo (
    key     int PRIMARY KEY,
    boo     text NOT NULL DEFAULT TO_CHAR(CURRENT_TIMESTAMP,'YYYYMM')
);

Ini adalah bidang teks yang memberi Anda lebih banyak kontrol atas bagaimana itu muncul secara default ketika Anda melakukan select somecolumns from sometable . Perhatikan bahwa Anda dapat memberikan string ke stempel waktu:

select '2012-10-11 12:13:14.56789'::timestamp
Result: 2012-10-11 12:13:14.56789

Anda dapat memberikan current_timestamp ke timestamp yang menghapus zona waktu:

select current_timestamp::timestamp
Result: 2012-10-23 21:18:05.107047

Anda dapat menyingkirkan zona waktu seperti ini:

select current_timestamp at time zone 'UTC'
Result: "2012-10-24 01:40:10.543251"

Tetapi jika Anda benar-benar ingin zona waktu kembali, Anda dapat melakukan ini:

select current_timestamp::timestamp with time zone
Result: 2012-10-23 21:20:21.256478-04

Anda dapat mencabut apa yang Anda inginkan dengan ekstrak:

SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 20

Dan kengerian ini:

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. GROUP atau DISTINCT setelah JOIN mengembalikan duplikat

  2. Membuat indeks unik parsial dengan sqlalchemy di Postgres

  3. Kesalahan saat memetakan array postgres di Spring JPA

  4. TABEL DESCRIBE PostgreSQL

  5. Mengakses file XML eksternal sebagai variabel dalam skrip PSQL (bersumber dari skrip bash)