我有一个表,其中每一行代表一个用户。我还将用户的时区存储为文本,例如“美国/丹佛”、“美国/纽约”等。
是否可以编写一个查询来返回当前时间位于其时区下午 1 点到 11 点之间的用户?
鉴于此表:
CREATE TABLE usr (
usr_id serial PRIMARY KEY
, usr text NOT NULL
, tz text -- time zone names
);
AT TIME ZONE
结构:
SELECT *, (now() AT TIME ZONE tz)::time AS local_time
FROM usr
WHERE (now() AT TIME ZONE tz)::time BETWEEN '13:00'::time AND '23:00'::time;
包括下午 1 点和晚上 11 点的上限和下限。
关于
AT TIME ZONE
:
SELECT CONVERT_TZ(FROM_UNIXTIME(1196440219),'GMT','美国/丹佛');
从表中选择 * WHERE DATE_FORMAT(CONVERT_TZ(FROM_UNIXTIME(timestamp_column),'GMT','美国/丹佛'),'%H') 介于 13 到 23 之间