使用EXTRACT获取单位时出现PostgreSQL错误

3
我一直在尝试从指定的时间戳中提取月份:
SELECT EXTRACT(MONTH FROM '2019-01-02 00:00:00+00');

但是我遇到了以下错误:

错误:函数pg_catalog.date_part(未知,未知)不唯一 LINE 1: SELECT EXTRACT(MONTH FROM '2019-01-02 00:00:00+00'); ^ HINT: 无法选择最佳候选函数。您可能需要添加显式类型转换。 SQL状态:42725 字符:8

然而,当我使用相同的命令指定CURRENT_TIMESTAMP变量时,返回了预期的结果。
SELECT EXTRACT(MONTH FROM CURRENT_TIMESTAMP);

我该如何让第一次尝试返回预期的结果?(涉及IT技术)
2个回答

3

将字符串转换为时间戳:

SELECT EXTRACT(MONTH FROM TIMESTAMP '2019-01-02 00:00:00+00');

来自文档的片段:

EXTRACT(field FROM source)

(...) source 必须是类型为 timestamp、time 或 interval 的值表达式(类型为 date 的表达式会被强制转换为 timestamp,因此也可以使用)。


啊,我没意识到我必须显式地进行类型转换。我以为它会足够聪明,自动解释类型!谢谢 :) - algorhythm

0

当我尝试通过C#和LINQ的Postgres适配器运行类似查询时,遇到了相同的错误消息。编译后的查询将DateTime参数传递到像EXTRACT(MONTH FROM ($1))这样的子句中,即使我的LINQ查询是使用dateTime.Month整数属性编写的(例如dbRecord.created_date.month == myPOCO.created.Month)。

我通过将myPOCO.created.Month提取到单独的int变量中来绕过此问题,这允许SQL引擎推断出一个整数参数而不是日期时间,并构建一个正确(且更快)的语句,而无需调用EXTRACTmyPOCO.created.Month


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