PostgreSQL:将时间戳转换为时间 - 或仅从时间戳列中检索时间

33
我想要的是类似于这个的东西:
select to_time( to_timestamp ( '03.04.2014 12:34:00', 'DD.MM.YYYY HH24:MI:SS' ) )

问题在于 to_time 函数不存在。我希望结果为:

12:34:00 (without the date)

这可能吗?

1个回答

62
select timestamp '2014-04-03 12:34:00'::time

我更喜欢使用 ANSI 日期/时间戳字面量,因为它们比 to_timestamp() 写起来更短。

上述等同于:

select to_timestamp ('03.04.2014 12:34:00', 'DD.MM.YYYY HH24:MI:SS')::time

::time 是Postgres中用于强制类型转换的简写表示。

如果您需要符合ANSI SQL标准,则应该按照以下方式编写:


select cast(timestamp '2014-04-03 12:34:00' as time)

这不是一个转换吗?:select timestamp '2014-04-03 12:34:00'。而这个是 select time '2014-04-03 12:34:00' - Clodoaldo Neto
第一个将生成时间戳数据类型,第二个将生成时间数据类型。select pg_typeof(time '2014-04-03 12:34:00'); - Clodoaldo Neto
@ClodoaldoNeto:timestamp '2014-04-03 12:34:00'是一个ANSI时间戳字面量,而不是转换。我很惊讶time '2014-04-03 12:34:00'可以工作,因为那应该是一个非法的时间字面量。 - user330315
谢谢 - 正是我需要的 :D - (编辑)几乎了。 :) 我有一个时间戳列,我想将其转换为时间,但选择cast(a as time)似乎对我无效。 - Lars Juel Jensen
@a_horse_with_no_name time '2014-04-03 12:34:00' 能够正常工作是因为 PostgreSQL 在处理日期/时间输入方面比 SQL 标准要求更加灵活。http://www.postgresql.org/docs/9.3/static/datatype-datetime.html - pozs
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接