我有一个time with time zone
类型的数据库字段。如何使用输出格式hh:mm:ss在EST5EDT时区中查询此字段?
我所能找到的只是使用多次调用EXTRACT
:
SELECT EXTRACT(HOUR FROM TIME WITH TIME ZONE '20:38:40-07' AT TIME ZONE 'EST5EDT');
[编辑:]
要清楚,这个查询:
SELECT TIME WITH TIME ZONE '20:38:40.001-07' AT TIME ZONE 'EST5EDT';
返回“22:38:40.001”,但我只想要“22:38:40”作为输出。
答案 0 :(得分:10)
使用TO_CHAR()功能:
SELECT TO_CHAR(date '2001-09-28' +time, 'HH24:MI:SS')
看到TO_CHAR只接受timestamp数据类型,您需要将任意日期值连接到您的时间值。
答案 1 :(得分:3)
“带时区的时间”基本上是一种虚假的数据类型,因此在很多情况下并不真正支持。
如何定义“带时区的时间”?时区取决于日期,这些日期不包含在数据类型中,因此未完全定义。 (是的,这是SQL标准的强制性要求,但这并不能使其明白)
你可能最好先修复你正在使用的数据类型。要么将时间戳与时区一起使用,要么使用时间(没有时区)。
答案 2 :(得分:0)
您只需将CAST和CAST用于时间类型:
SELECT CAST(now() AS TIME)
(当然,结果会有不同的数据类型)