如何将数值列作为小时数添加到日期时间列?SQL语句报错求助
解决SQL生成new_date列的语法错误问题
先明确你的表结构与数据:
| date | numeric_data | new_date |
|---|---|---|
| 2019-04-16 00:00:00.0 | 11 | 2019-04-16 11:00:00.0 |
| 2019-04-15 00:00:00.0 | 13 | 2019-04-16 13:00:00.0 |
你原SQL语句的问题在于interval的构造语法错误,不同数据库对时间间隔的处理语法有差异,以下是主流数据库的正确写法:
PostgreSQL
两种可行写法:
- 拼接字符串后转换为interval类型:
select date + (numeric_data || ' hours')::interval as new_date from my_table;
- 用基础时间间隔乘以数值:
select date + interval '1 hour' * numeric_data as new_date from my_table;
MySQL
直接使用INTERVAL关键字结合数值与单位,或用DATE_ADD函数:
-- 直接运算方式 select date + INTERVAL numeric_data HOUR as new_date from my_table; -- DATE_ADD函数方式 select DATE_ADD(date, INTERVAL numeric_data HOUR) as new_date from my_table;
Oracle
可以用专用函数转换,或利用日期的数值特性计算:
- 使用
NUMTODSINTERVAL函数:
select date + NUMTODSINTERVAL(numeric_data, 'HOUR') as new_date from my_table;
- 利用日期数值逻辑(Oracle中1代表1天,1小时等价于1/24):
select date + numeric_data/24 as new_date from my_table;
内容的提问来源于stack exchange,提问作者Mariam
相关产品推荐
相关产品推荐

