Redshift使用TO_CHAR转换日期为字符串报错:列"yyyymm"不存在
Redshift SQL查询报错排查解决
错误原因
Redshift里双引号(") 是用来引用标识符(比如列名、表名)的,你原SQL里用双引号包裹了to_char的格式串"yyyyMMdd"和日期值"20221220",数据库会把它们当成tableA中的列名,而你的表根本没有对应列,所以触发了ERROR: column "yyyymm" does not exist报错。
修正后的SQL
select * from tableA where to_char(date, 'yyyyMMdd') = '20221220';
关键说明
- 在Redshift(以及绝大多数SQL方言)中,单引号(') 才是用来定义字符串常量的正确方式,双引号只在需要保留标识符大小写或处理特殊命名的列/表时才用。
- 额外优化:如果
date列有索引,直接用日期范围匹配的性能会比to_char转换后匹配更好,避免函数转换导致索引失效:
select * from tableA where date >= '2022-12-20'::timestamp and date < '2022-12-21'::timestamp;
内容的提问来源于stack exchange,提问作者Day Lee
相关产品推荐
相关产品推荐

