SQL筛选:如何确保两日期列均属于2023年1月
解决方法
你原来用OR的问题在于,只要其中一列符合条件就会被选中,自然会出现另一列日期不符合要求的情况。要实现“两列日期均为2023年1月”的筛选目标,得用AND同时约束两列,还要适配数据中存在空值的场景。
直接看修正后的SQL语句:
SELECT * FROM table WHERE (DATE_TRUNC(SAFE_CAST(column_a AS DATE), MONTH) = '2023-01-01' OR column_a IS NULL) AND (DATE_TRUNC(column_b, MONTH) = '2023-01-01' OR column_b IS NULL)
核心说明:
- 用
AND替代OR,确保两列都满足「要么是2023年1月的日期,要么是空值」的条件 - 保留
SAFE_CAST处理column_a的类型转换,避免非日期格式的值导致查询报错 - 如果你需要两列都必须有值且都属于2023年1月,可以去掉空值判断的部分:
SELECT * FROM table WHERE DATE_TRUNC(SAFE_CAST(column_a AS DATE), MONTH) = '2023-01-01' AND DATE_TRUNC(column_b, MONTH) = '2023-01-01'
这样就能精准筛选出符合要求的数据,不会再出现某列日期不在2023年1月的情况。
内容的提问来源于stack exchange,提问作者Adrien-13
相关产品推荐
相关产品推荐

