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

Làm thế nào để chuyển đổi trường dấu thời gian thành chuỗi ISO 8601 trong một múi giờ nhất định?

Bạn có thể chơi với các tham số GUC datestyletimezone bên trong một chức năng để có được những gì bạn muốn. Đây là một ví dụ (tuy nhiên, nó trả về micro giây, vì vậy có thể bạn sẽ cần điều chỉnh nó một chút):

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;

Kết quả:

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)

Cập nhật:đã chỉnh sửa. Bạn có thể sử dụng timestamptz(3) , chỉ định độ chính xác (theo mặc định, nó sẽ đi với micro giây, trong khi 3 sẽ chỉ giữ lại phần nghìn giây). Ngoài ra, bạn có thể sử dụng res := to_char(ts::timestamptz, 'IYYY-MM-DDT HH24:MI:SS:MSOF'); thay vì ::timestamptz(3)::text chuỗi chuyển đổi và trong trường hợp này là (3) sẽ không cần thiết.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đặt lại khóa chính PostgreSQL thành 1

  2. Quy trình xử lý di chuyển và khởi tạo tiếp theo?

  3. pg_dump bỏ qua trình tự bảng?

  4. Đặt $$ trong chuỗi được trích dẫn bằng đô la trong PostgreSQL

  5. ubuntu `env:‘ pg_dump ’:Không có lỗi tệp hoặc thư mục` như vậy