Database 使用EXTRACT获取单元时出现PostgreSQL错误
我一直在尝试从指定的时间戳中提取月份:Database 使用EXTRACT获取单元时出现PostgreSQL错误,database,postgresql,extract,Database,Postgresql,Extract,我一直在尝试从指定的时间戳中提取月份: SELECT EXTRACT(MONTH FROM '2019-01-02 00:00:00+00'); 但我得到了以下错误: 错误:函数pg_catalog.date_partunknown,unknown不是唯一的 第1行:从“2019-01-02 00:00:00+00”中选择提取月份提示: 无法选择最佳候选函数。您可能需要添加 显式类型转换。SQL状态:42725字符:8 但是,当我使用指定当前_TIMESTAMP变量的相同命令时,将返回预期结果
SELECT EXTRACT(MONTH FROM '2019-01-02 00:00:00+00');
但我得到了以下错误:
错误:函数pg_catalog.date_partunknown,unknown不是唯一的
第1行:从“2019-01-02 00:00:00+00”中选择提取月份提示:
无法选择最佳候选函数。您可能需要添加
显式类型转换。SQL状态:42725字符:8
但是,当我使用指定当前_TIMESTAMP变量的相同命令时,将返回预期结果
SELECT EXTRACT(MONTH FROM CURRENT_TIMESTAMP);
如何从第一次尝试返回预期结果中获取单位?将字符串转换为时间戳:
SELECT EXTRACT(MONTH FROM TIMESTAMP '2019-01-02 00:00:00+00');
一段来自:
从源中提取字段
。。。源必须是类型为timestamp、time或time的值表达式
间隔日期类型的表达式被强制转换为时间戳,并且可以
因此也可以使用
在尝试通过C和LINQ的Postgres适配器运行类似查询时,我遇到了相同的错误消息。编译后的查询将DateTime参数传递到诸如EXTRACTMONTH FROM$1之类的子句中,即使我的LINQ查询是使用DateTime.Month整数属性编写的,例如dbRecord.created\u date.Month==myPOCO.created.Month
我可以通过将myPOCO.created.Month拉出到一个单独的int变量来绕过这个问题,这允许SQL引擎推断一个整数参数而不是日期时间,并构建一个正确且更快的语句,而无需调用EXTRACT和myPOCO.created.Month。啊,我没有意识到我必须显式强制转换。我认为这将是足够聪明的interprit类型!谢谢: