PostgreSQL中使用Pandas按日期筛选表行语法错误求助
搞定PostgreSQL日期筛选的语法问题
嘿,我一眼就瞅出你SQL语句里的两个小毛病,这就是触发SyntaxError的根源:
- 多写了多余的字段名:你在
CAST(ts_column as date) =后面莫名其妙加了ts_column,这完全没必要,直接跟日期值就行。 - 日期值的引号用错了:PostgreSQL里日期/字符串常量得用单引号包起来,你用了双引号——而双引号在PG里是用来标记表名、列名这类标识符的,数据库会把
"2019-06-19"当成一个列名,这不报错才怪呢!
给你几个正确的写法,随便挑一个用
写法1:CAST转换+单引号日期
SELECT * FROM "TABLE" WHERE CAST(ts_column as date) = '2019-06-19'
写法2:PG专属的日期常量语法(更清晰)
SELECT * FROM "TABLE" WHERE CAST(ts_column as date) = DATE '2019-06-19'
写法3:用::简化类型转换(PG老玩家最爱)
SELECT * FROM "TABLE" WHERE ts_column::date = '2019-06-19'
额外提个优化小技巧
如果你的ts_column是timestamp类型(带时分秒的时间戳),推荐用范围查询替代类型转换,这样能利用字段上的索引(如果有的话),避免全表扫描,效率更高:
SELECT * FROM "TABLE" WHERE ts_column >= '2019-06-19' AND ts_column < '2019-06-20'
这个写法会匹配2019-06-19当天00:00:00到2019-06-19 23:59:59.999...的所有数据,比类型转换更精准高效。
把上面的正确SQL替换到你的query变量里,pd.read_sql_query就能正常跑起来啦!
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

