我正在尝试从 SSMS 运行 Select 查询(链接服务器)以从 AWS 云上的 PostgreSQL 获取数据。我的查询在 SSMS 中运行良好,但只要我输入以下代码行
and c.created_date >=concat(to_char(CURRENT_DATE - interval '7 day', 'yyyy-mm-dd'),' 00:00:00'):: timestamp
and c.created_date <= concat(to_char(CURRENT_DATE - interval '1 day','yyyy-mm-dd') ,' 23:59:59') ::timestamp
它开始给我错误:日期/时间字段值超出范围:“2020-06-0700:00:00”;
我的 PostgreSQL 中的 created_date 字段是没有时区的时间戳
我应该选择哪种数据类型与 SQL Server 兼容?
你把事情复杂化了。
concat()
并且to_char()
不需要和问题的根本原因。可以使用以下方法获得 7 天前的开始时间:
current_date - 7
. 由于它没有时间部分,因此与timestamp
列的比较将自动假设00:00:00
.如果您想比较截至昨天午夜的所有内容,只需使用
< current_date
.所以你的表达可以简化为:
注意第二个条件中的
<
而不是。<=
如果你想明确时间,你可以使用
但这不是必需的,并且与第一个条件完全相同。
created_date < current_date
大致相当于created_date <= (current_date - 1) + time '23:59:59'
(这是你的初衷)。但是,它只是大致等效,因为您的尝试实际上并不正确,因为它错过了 和 之间的时间
23:59:59.000000
,23:59:59.999999
这就是为什么最好<
在第二天开始时使用。