CockroachDB v20.1.1版本日期差值计算异常问题咨询
问题原因
- 该异常不是操作错误导致,是CockroachDB v20.1.1版本自带的已知日期计算bug,根因是该版本对跨闰年的
interval类型计算逻辑存在处理缺陷,仅在v20.1.0、v20.1.1两个小版本中存在。 - 你给出的两个测试语句语法完全符合规范,触发的是旧版本的原生问题。
解决建议
- 最彻底的方案是将CockroachDB集群升级到v20.1.2及以上的稳定补丁版本,或升级到v20.2+正式版本,官方已在这些版本中修复了该计算缺陷,升级后原有语句可直接返回正确结果。
- 若暂时无法完成版本升级,可以使用以下替代写法规避bug:
- 使用
make_date函数手动构造偏移后的日期,避免直接和interval做运算:
select make_date( extract(year from '2021-10-29'::date)::int - 1, extract(month from '2021-10-29'::date)::int, extract(day from '2021-10-29'::date)::int );- 调整区间计算逻辑,拆分为年份偏移+日期偏移两步计算:
select date_trunc('year', '2021-10-29'::date) - interval '1 year' + ('2021-10-29'::date - date_trunc('year', '2021-10-29'::date)); - 使用
- 建议统一使用
interval '1 year'的单数写法,虽然部分版本对复数years做了兼容,但单数是SQL标准规范写法,可避免额外的解析异常。
内容的提问来源于stack exchange,提问作者user2779665
相关产品推荐
相关产品推荐

