2016-02-24 151 views
1

我正在运行PostgreSQL 9.4,并在我的查询中正确地转换时区。更新数据库的服务器是XMPP聊天服务器,所涉及的列是sent_date,它的数据类型为timestampzPostgreSQL时区转换

首先,我测试的转换从UTC工程,以东部时间静态(第一无需转换,然后用):

tcmadb-pub=> select '2016-02-24 05:52:58.686893'::timestamp with time zone; 
      timestamptz 
------------------------------- 
2016-02-24 05:52:58.686893+00 
(1 row) 

tcmadb-pub=> select '2016-02-24 05:52:58.686893'::timestamp with time zone AT TIME ZONE 'AEDT'; 
      timezone 
---------------------------- 
2016-02-24 16:52:58.686893 
(1 row) 

然而,当我运行实际的查询,我只看到数据timestampz和不如时区时间:

SELECT sent_date 
FROM jm 
WHERE 
    from_jid like '[email protected]%' AND 
    sent_date::timestamp with time zone AT TIME ZONE 'AEDT' BETWEEN '2016-02-23' AND '2016-02-29'; 
      sent_date 
------------------------------- 
2016-02-23 22:13:33.858971+00 
2016-02-23 22:13:31.458917+00 
2016-02-23 22:13:26.186859+00 
2016-02-23 22:13:46.347431+00 
2016-02-23 22:22:33.483243+00 
2016-02-23 22:22:38.482727+00 
2016-02-23 22:22:35.929189+00 
2016-02-23 22:23:15.196597+00 
2016-02-23 22:24:19.257813+00 
2016-02-23 22:23:39.746997+00 
2016-02-23 22:24:14.382916+00 
2016-02-23 22:24:45.410786+00 
2016-02-23 22:23:58.929407+00 
2016-02-23 22:28:46.33302+00 
2016-02-23 22:28:52.141082+00 
2016-02-23 22:29:16.330865+00 
2016-02-23 22:58:33.798908+00 
2016-02-23 22:58:33.795771+00 
2016-02-24 03:06:11.60482+00 
2016-02-24 03:06:31.276288+00 
2016-02-24 03:07:07.885728+00 
2016-02-24 03:14:31.630305+00 
2016-02-24 03:14:31.632573+00 
2016-02-24 05:16:21.757124+00 
2016-02-24 05:16:21.760133+00 
2016-02-24 05:51:38.791875+00 
2016-02-24 05:51:38.794093+00 
2016-02-24 05:52:58.686893+00 
(28 rows) 

这从来没有工作过,所以我猜我的查询是错误的东西。

回答

0

您只在WHERE部分更改sent_date的时区。

你也可以做到这一点SELECT部分,如:

SELECT sent_date::timestamp with time zone AT TIME ZONE 'AEDT' 
    FROM jm 
    WHERE from_jid like '[email protected]%' 
    AND sent_date::timestamp with time zone AT TIME ZONE 'AEDT' BETWEEN '2016-02-23' AND '2016-02-29'; 
+0

谢谢@OcuS就是这样 – Daniel