SQL如何将表中整数列的值加到日期/时间戳列实现日期偏移
错误原因
interval "value" day语法仅支持传入固定常量值,SQL解析器会直接将双引号包裹的"value"识别为标识符而非表字段的取值,因此无法完成动态计算,导致执行报错。
正确实现方案
通用兼容写法(支持PostgreSQL、Redshift、Snowflake等多数兼容SQL标准的数据库)
通过字段值乘以单天时间间隔的方式实现动态叠加:
SELECT "date", "value"::Int, "date" + "value"::Int * interval '1 day' AS "computed" FROM "tab1";
不同数据库专属优化写法
- PostgreSQL:可以使用可读性更高的
make_interval函数SELECT "date", "value"::Int, "date" + make_interval(days => "value"::Int) AS "computed" FROM "tab1"; - MySQL:使用内置
DATE_ADD函数SELECT `date`, `value`, DATE_ADD(`date`, INTERVAL `value` DAY) AS `computed` FROM `tab1`; - Oracle:使用
NUMTODSINTERVAL函数转换时间间隔SELECT "date", "value", "date" + NUMTODSINTERVAL("value", 'DAY') AS "computed" FROM "tab1";
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

