如何从timestamp类型列the_date_transaction中排除2020年?
问题分析与解决方案
你的WHERE子句存在两个关键错误,导致查询无结果:
- 同一个日期不可能同时落在2019年区间和2021-2022区间,用
AND连接两个互斥的BETWEEN条件,逻辑上永远无法匹配到数据。 - 日期
'2022-11-31'无效,11月仅有30天,这个错误也会干扰数据匹配逻辑。
正确的WHERE子句写法
方法1:用OR连接有效区间
WHERE tdt.the_date_transaction BETWEEN '2019-01-01' AND '2019-12-31 23:59:59' OR tdt.the_date_transaction BETWEEN '2021-01-01' AND '2022-11-30 23:59:59'
注:timestamp类型建议加上时分秒,避免遗漏当天最后一刻的数据;多数数据库支持日期字符串直接与timestamp类型比较,无需to_date转换
方法2:直接排除2020年数据(更简洁)
WHERE YEAR(tdt.the_date_transaction) != 2020
此写法直观过滤掉所有年份为2020的记录,无需拆分区间
方法3:用范围判断规避日期天数问题
WHERE tdt.the_date_transaction < '2020-01-01' OR tdt.the_date_transaction >= '2021-01-01'
这种写法无需纠结月份天数,覆盖所有2020年之前及之后的数据
内容的提问来源于stack exchange,提问作者vicdkt
相关产品推荐
相关产品推荐

