使用sql查询将配置数据库中的预配置时间戳从utc格式转换为ist

时间:2017-07-28 18:11:03

标签: mysql postgresql metabase

showing the initial timestamp format

目前我正在开发配置数据库。我有时间戳这样的'2017年6月23日星期五上午8:43'。我需要将此时间戳从utc转换为ist形式。

代码是这样的

SELECT CAST("public"."locations"."timestamp" AS date) AS "timestamp"
FROM "public"."locations"
GROUP BY CAST("public"."locations"."timestamp" AS date)
ORDER BY CAST("public"."locations"."timestamp" AS date) ASC

1 个答案:

答案 0 :(得分:0)

在PostgreSQL 1 中假设一个简化的场景专注于将时间戳转换为IST,这就是这个:

CREATE TABLE locations
(
    id serial PRIMARY KEY,
    your_timestamp timestamp with time zone
) ;

注意:请勿使用timestamp作为列名,以避免混淆。 timestamp已经是type

INSERT INTO locations
    (your_timestamp)
VALUES
    ('2017-01-01 10:00:00 UTC'),
    ('2017-01-01 10:00:00 Europe/Rome'),
    ('2017-01-01 10:00:00 America/New_York'),
    ('2017-01-01 10:00:00 IST') ;

您将转换所有这些时间(不仅是已经作为UTC输入的那些时间,或者连接到数据库的客户端的本地时区),您将使用:

SELECT
    id, 
    your_timestamp,
    your_timestamp AT TIME ZONE 'UTC' AS timestamp_utc,
    your_timestamp AT TIME ZONE 'IST' AS timestamp_ist
FROM
    locations ;
id | your_timestamp         | timestamp_utc       | timestamp_ist      
-: | :--------------------- | :------------------ | :------------------
 1 | 2017-01-01 10:00:00+00 | 2017-01-01 10:00:00 | 2017-01-01 12:00:00
 2 | 2017-01-01 09:00:00+00 | 2017-01-01 09:00:00 | 2017-01-01 11:00:00
 3 | 2017-01-01 15:00:00+00 | 2017-01-01 15:00:00 | 2017-01-01 17:00:00
 4 | 2017-01-01 08:00:00+00 | 2017-01-01 08:00:00 | 2017-01-01 10:00:00

您可以在 dbfiddle here

查看

参考文献:

1 我不知道MySQL的等价物。我希望你实际上使用的是PostgreSQL,因为你的标识符是"double quoted",而不是MySQL中的`backtick quoted`