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

Bagaimana cara mengubah bidang stempel waktu ke string ISO 8601 di zona waktu tertentu?

Anda dapat bermain dengan parameter GUC datestyle dan timezone di dalam fungsi untuk mendapatkan apa yang Anda inginkan. Berikut ini contohnya (namun, ini mengembalikan mikrodetik, jadi mungkin Anda perlu menyesuaikannya sedikit):

create or replace function timestamp_iso8601(ts timestamptz, tz text) returns text as $$
declare
  res text;
begin
  set datestyle = 'ISO';
  perform set_config('timezone', tz, true);
  res := ts::timestamptz(3)::text;
  reset datestyle;
  reset timezone;
  return replace(res, ' ', 'T') || ':00';
end;
$$ language plpgsql volatile;

Hasil:

test=# select timestamp_iso8601(now()::timestamptz, 'Europe/Moscow');
       timestamp_iso8601
-------------------------------
 2017-07-12T08:56:58.692985+03:00

test=# select timestamp_iso8601(now()::timestamptz, 'Pacific/Auckland');
       timestamp_iso8601
-------------------------------
 2017-07-12T17:59:05.863483+12:00
(1 row)

Pembaruan:diedit. Anda dapat menggunakan timestamptz(3) , menentukan presisi (secara default, ini akan berlangsung dengan mikrodetik, sementara 3 hanya akan menyimpan milidetik). Atau, Anda dapat menggunakan res := to_char(ts::timestamptz, 'IYYY-MM-DDT HH24:MI:SS:MSOF'); bukannya ::timestamptz(3)::text rantai konversi, dan dalam hal ini (3) tidak akan dibutuhkan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan data dari php ke dalam skrip c#

  2. org.hibernate.internal.util.config.ConfigurationException:Tidak dapat menemukan sumber daya cfg.xml [/HibernateTest/src/hibernate.cfg.xml]

  3. Hibernasi Lambat untuk Memperoleh Koneksi Postgres

  4. Bagaimana cara terhubung ke localhost PostgreSQL di Mac menggunakan GUI PSequel?

  5. Cara Memformat Angka sebagai Mata Uang di PostgreSQL