如何在Postgres中设置“time with time zone”的格式?

时间:2009-12-21 22:15:22

标签: sql database postgresql time formatting

我有一个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”作为输出。

3 个答案:

答案 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)

(当然,结果会有不同的数据类型)