Oracle数据库中VARCHAR存储的时间与日期字段合并为Date/Time字段咨询
Oracle合并日期、时间字段为完整DATE类型实现方法
首先明确:Oracle 内置的DATE类型本身包含年、月、日、时、分、秒六个维度的信息,你现有的独立DATE字段默认时分秒为0,只需将VARCHAR类型的时间值合并到该字段即可得到完整的日期时间值。
实现方法
方法1:字符串拼接转换(兼容性好)
通过将日期字段转字符串拼接时间值后,再转回DATE类型,适配所有Oracle版本:
-- 假设日期字段名为SITE_DATE,替换为你的实际表名、字段名即可 SELECT TO_DATE( TO_CHAR(SITE_DATE, 'YYYY-MM-DD') || ' ' || SITE_START_TIME, 'YYYY-MM-DD HH24:MI' ) AS SITE_FULL_DATETIME FROM 你的表名;
方法2:时间间隔运算(性能更优)
直接将时间值转为时间间隔加到原日期字段上,避免多次字符串转译,大数据量场景下效率更高:
SELECT SITE_DATE + TO_DSINTERVAL('0 ' || SITE_START_TIME || ':00') AS SITE_FULL_DATETIME FROM 你的表名;
说明:TO_DSINTERVAL要求输入格式为天 时:分:秒,此处补0天、0秒适配你现有的HH:MI格式时间值。
注意事项
- 转换前可先校验非法时间值,避免转换报错:
-- 查询出格式不符合要求的SITE_START_TIME记录,先处理再转换 SELECT * FROM 你的表名 WHERE VALIDATE_CONVERSION(SITE_START_TIME AS INTERVAL DAY TO SECOND, 'HH24:MI') = 0; - 如果查询结果仅显示日期不显示时间,是会话显示格式的问题,执行以下语句修改会话显示格式即可看到完整时分秒:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
持久化存储新字段
如果需要把合并后的结果永久存入表中,执行以下语句:
-- 新增DATE类型的存储字段 ALTER TABLE 你的表名 ADD SITE_FULL_DATETIME DATE; -- 批量更新字段值 UPDATE 你的表名 SET SITE_FULL_DATETIME = SITE_DATE + TO_DSINTERVAL('0 ' || SITE_START_TIME || ':00'); -- 提交变更 COMMIT;
内容的提问来源于stack exchange,提问作者ScottW
相关产品推荐
相关产品推荐

