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

Postgresql 在postgres中使用子查询提取日期组件,postgresql,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...

这难道不管用吗

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
正如这里所解释的

感谢您的帮助:)

这确实有效:

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
保留

见:

这确实有效:

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
保留

见:


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

      select extract(DAY FROM (select to_timestamp('2015-02-23','YYYY-MM-DD')));
      
      我看到您当前方法存在的问题:

      • 正如@harmic指出的,您不需要
        TIMESTAMP
        关键字,因为
        to_TIMESTAMP()
        函数已经返回了时间戳类型
      • 此外,您正在将结果从
        转换为\u timestamp()
        再次转换为不需要的时间戳
      • 时间戳的格式掩码错误。您使用了
        YY-MM-DD
        ,但考虑到您有四位数的年份,它实际上应该是
        yyy-MM-DD
        。在这种情况下,这可能并不重要,但如果您计划提取年份,这可能很重要

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

          select extract(DAY FROM (select to_timestamp('2015-02-23','YYYY-MM-DD')));
          
          我看到您当前方法存在的问题:

          • 正如@harmic指出的,您不需要
            TIMESTAMP
            关键字,因为
            to_TIMESTAMP()
            函数已经返回了时间戳类型
          • 此外,您正在将结果从
            转换为\u timestamp()
            再次转换为不需要的时间戳
          • 时间戳的格式掩码错误。您使用了
            YY-MM-DD
            ,但考虑到您有四位数的年份,它实际上应该是
            yyy-MM-DD
            。在这种情况下,这可能并不重要,但如果您计划提取年份,这可能很重要

          您的错误输出与查询不匹配。为什么要将时间戳转换为时间戳?错误输出与查询不匹配。为什么要将时间戳转换为时间戳?子选择是不必要的:
          select extract(DAY FROM to_timestamp('2015-02-23','YYYY-MM-DD'))
          Thank@Clodoaldonetoth子选择是不必要的:
          select extract(DAY FROM to_timestamp('2015-02-23','yyyyy-MM-DD'))
          谢谢@ClodoaldoNeto