Làm cách nào để chuyển đổi thời gian unix sang Timstamp của PostgreQuery mà không có thời gian?


17

Tôi có cơ sở dữ liệu PostgreSQL chạy trên máy chủ có múi giờ được đặt thành Múi giờ của Ấn Độ (tức là UTC +5: 30)

Tôi có một số dữ liệu trong một bảng được tạo như thế này:

CREATE TABLE "CLOUDDATA"
(
  "CD_Tm_Obs" timestamp without time zone,
  "CD_Avg_Cloud" double precision
)

Tôi muốn truy vấn dữ liệu và nhận các giá trị trong một thời gian cụ thể. Đầu vào của tôi sẽ là Dấu thời gian Unix (tức là Giây từ ngày 1 tháng 1 năm 1970)

Cách duy nhất để chuyển đổi thời gian unix thành Dấu thời gian tôi đã tìm thấy là đây : select to_timestamp(TRUNC(CAST(1395036000 AS bigint))). Nhưng điều này tạo ra dấu thời gian với múi giờ. Dữ liệu của tôi nằm trong timestamp without time zone, vì vậy tôi không nhận được bất kỳ kết quả nào.

Làm cách nào để chuyển đổi thời gian unix sang Timstamp của PostgreQuery mà không cần thời gian?

Câu trả lời:


36

Dưới đây là một vài cách tiếp cận:

Tôi đã đơn giản hóa truy vấn của bạn, vì bạn không cần TRUNC(), cũng không cần CAST().

SELECT to_timestamp(1395036000) AT TIME ZONE 'UTC';

SELECT timestamp '1970-01-01 00:00:00' + interval '1395036000 second';

Để tham khảo, có thể tìm thêm thông tin tại các liên kết sau:


Đoạn mã thứ hai cũng hoạt động trên RedShift.
Gianluca Casati
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.