使用postgres中的子查询提取日期组件

时间:2017-02-09 00:49:33

标签: postgresql

这应该不起作用吗?

select extract(DAY FROM TIMESTAMP (select to_timestamp('2015-02-23','YY-MM-DD')::timestamp))

ERROR:  syntax error at or near "select"
LINE 1: select extract(YEAR FROM TIMESTAMP (select to_timestamp('201...
                                        ^
********** Error **********

ERROR: syntax error at or near "select"
SQL state: 42601
Character: 37

如此处extract doc

所述

感谢任何帮助谢谢:)

2 个答案:

答案 0 :(得分:0)

这确实有效:

psql=> select extract(DAY FROM (select to_timestamp('2015-02-23','YY-MM-DD')::timestamp))
;
 date_part
-----------
        23
(1 row)

这是因为extract的语法是:

EXTRACT(field FROM source)

示例中的关键字TIMESTAMP实际上是文字时间戳的一部分,但您没有使用文字时间戳,而是使用标量子查询表达式,因此请保留TIMESTAMP

请参阅:

答案 1 :(得分:0)

以下查询将为您提供所需的结果:

select extract(DAY FROM (select to_timestamp('2015-02-23','YYYY-MM-DD')));

我用你当前的方法看到的问题:

  • 正如@harmic指出的那样,您不需要TIMESTAMP关键字,因为to_timestamp()函数已经返回时间戳类型。
  • 此外,您将结果从to_timestamp()再次投射到时间戳,这是不需要的
  • 时间戳的格式设置掩码错误。您使用了YY-MM-DD,但考虑到您有四位数的年份,它应该YYYY-MM-DD。在这种情况下,这可能无关紧要,但如果您计划提取年份,则可能很重要。