gpt4 book ai didi

postgresql - 如何使用类型为 timestamptz 的字段选择 postgres 中两个日期之间的所有条目

转载 作者:行者123 更新时间:2023-11-29 14:26:26 25 4
gpt4 key购买 nike

这是一些示例代码 - 我相信它应该很简单,下面的代码与我在 web/stackoverflow 上找到的片段相同..

create table mydb (start timestamptz);
insert into mydb values ('2019-08-05 10:00:00');

select * from mydb where 'start' BETWEEN '2019-08-01 00:00:00' and '2019-08-30 00:00:00';

select * from mydb where 'start' BETWEEN '2019-08-01' and '2019-08-30';

当我希望显示插入数据库的值时,两个查询都返回零结果?

这是一个 sql fiddle :http://sqlfiddle.com/#!17/11842/2

最佳答案

'start' 是字符串文字(常量),而不是列引用。您的查询正在将字符串 (varchar) 值 'start' 与字符串值 '2019-08-01 00:00:00'

进行比较

如果您运行以下命令,您可以自己查看:

select 'start' BETWEEN '2019-08-01 00:00:00' and '2019-08-30 00:00:00';

您需要删除 'start' 周围的单引号以使其成为列引用:

select * 
from the_table
where start BETWEEN '2019-08-01 00:00:00' and '2019-08-30 00:00:00';

这是一个很好的例子,为什么提供具有适当数据类型的常量值有助于编写更好的语句。如果您使用了真正的时间戳常量(而不是字符串),Postgres 将拒绝比较这些值:

select 'start' BETWEEN timestamp '2019-08-01 00:00:00' and timestamp '2019-08-30 00:00:00'

导致错误。


请注意,对于时间戳值,通常最好避免使用 BETWEEN 运算符。我想您的查询应该包括 8 月 30 日的行,而您当前的查询没有。最好写成:

where start >= timestamp '2019-08-01 00:00:00' 
and start < timestamp '2019-09-01 00:00:00'

关于postgresql - 如何使用类型为 timestamptz 的字段选择 postgres 中两个日期之间的所有条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57369962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com