关于日期列与整数列求和异常的技术咨询
解决日期偏移计算的SQL问题
你当前的问题根源在于column1和column2都是字符串类型,直接用+运算符会被数据库识别为字符串拼接,所以得到了20230169这种非预期结果。要实现日期偏移60天的需求,必须先转换数据类型,再用数据库的日期函数进行计算,以下是主流数据库的实现方案:
MySQL 解决方案
SELECT DATE_ADD(STR_TO_DATE(column1, '%Y-%m-%d'), INTERVAL CAST(column2 AS UNSIGNED) DAY) AS column3;
STR_TO_DATE(column1, '%Y-%m-%d'):将字符串格式的日期转为MySQL可识别的日期类型CAST(column2 AS UNSIGNED):将字符串数字转为无符号整数DATE_ADD:按照指定天数偏移日期
PostgreSQL 解决方案
方案一:
SELECT (column1::DATE) + (column2::INTEGER || ' days')::INTERVAL AS column3;
方案二(更简洁):
SELECT (column1::DATE) + INTERVAL '1 day' * column2::INTEGER AS column3;
column1::DATE:强制将字符串转为日期类型column2::INTEGER:将字符串数字转为整数- 通过拼接间隔字符串或乘法实现天数偏移
SQL Server 解决方案
SELECT DATEADD(DAY, CAST(column2 AS INT), CONVERT(DATE, column1)) AS column3;
CONVERT(DATE, column1):将字符串日期转为日期类型CAST(column2 AS INT):将字符串数字转为整数DATEADD:指定天数进行日期偏移
核心注意点
- 必须先将字符串类型的日期转换为日期/日期时间类型,否则无法进行日期运算
- 字符串类型的数字必须转为整数类型,避免被当成字符串处理
- 不要直接用
+运算符处理日期和数字,需使用数据库原生的日期偏移函数
内容的提问来源于stack exchange,提问作者Kevin Sarmiento
相关产品推荐
相关产品推荐

