PostgreSQL中如何按employeeId与时间范围筛选timestamp类型数据
PostgreSQL日期范围查询语法修正
你的查询语句报错是因为**date(created_at) = between存在语法错误**——=运算符和BETWEEN关键字不能同时使用,这违反了PostgreSQL的语法规则。
以下是满足需求的几种正确写法:
写法1:使用BETWEEN(需注意时间边界)
如果要精确匹配包含2022-08-29 00:00:00到2022-08-31 23:59:59的所有时间戳:
SELECT * FROM employee WHERE employeeId = 3 AND created_at BETWEEN '2022-08-29 00:00:00' AND '2022-08-31 23:59:59';
写法2:推荐的边界判断(避免时间精度问题)
这种写法更严谨,不会因为timestamp的毫秒级精度漏掉数据,同时如果created_at字段有索引,还能利用索引提升查询性能:
SELECT * FROM employee WHERE employeeId = 3 AND created_at >= '2022-08-29' AND created_at < '2022-09-01';
写法3:使用date()函数转换(注意索引失效风险)
如果一定要将timestamp转换为日期后匹配,需去掉多余的=:
SELECT * FROM employee WHERE employeeId = 3 AND date(created_at) BETWEEN '2022-08-29' AND '2022-08-31';
注意:这种写法会对
created_at字段做函数转换,若该字段有索引则无法被使用,数据量大时查询效率会下降。
内容的提问来源于stack exchange,提问作者Danang Wahyu Nugroho
相关产品推荐
相关产品推荐

