PostgreSQL 中 date_part 函数的语法错误

Syntax error in date_part function in PostgreSQL

我在以下查询中有语法错误,该查询从 BIZ_TRANSACTIONlast_updated_time 列检索月份,其中 last_updated_time 存储为毫秒。那么,如何应用 date_part() 函数呢? 我使用了以下查询,但它在 date_part().

附近显示语法错误
SELECT date_part('month', timestamp TO_CHAR(TO_TIMESTAMP(LAST_UPDATED_TIME / 1000), 'DD/MM/YYYY HH24:MI:SS'))
FROM BIZ_TRANSACTION

如果我没有正确理解你的问题,你想要这样的东西:

SELECT date_part('month',to_timestamp(LAST_UPDATED_TIME/1000));
FROM BIZ_TRANSACTION

DATE_PART 函数需要两个文本类型的参数和一些 time/date/interval 类型的参数。

当您将时间戳转换为 char 类型时,没有与您的输入类型相匹配的函数,因为它变成了文本和文本。

此外,当您从中检索月份编号时,将时间戳转换为 char 是多余的开销。在这种情况下,格式化没有任何区别,最好使用 Postgres 默认日期样式,这样您就不会遇到刚刚遇到的错误:-)

select date_part('month', to_timestamp(last_updated_time/1000))
from biz_transaction

9.5 版本的 date_part 函数列表是(通过键入 \df date_part 在 psql 中自己查看):

  Schema   |    Name    |  Result datatype  |        Datatype of arguments
------------+-----------+-------------------+-----------------------------------
 pg_catalog | date_part | double precision  | text, abstime                     
 pg_catalog | date_part | double precision  | text, date                        
 pg_catalog | date_part | double precision  | text, interval                    
 pg_catalog | date_part | double precision  | text, reltime                     
 pg_catalog | date_part | double precision  | text, time with time zone         
 pg_catalog | date_part | double precision  | text, time without time zone      
 pg_catalog | date_part | double precision  | text, timestamp with time zone    
 pg_catalog | date_part | double precision  | text, timestamp without time zone