Oracle SQL中如何为列设置硬编码时间戳并解决字面量字符串错误
解决方法
根据你的需求,分两种场景给出具体实现:
场景1:grade_date是字符串类型
如果原字段是字符串格式,我们可以先提取日期部分,拼接固定的时间后缀,再转换为timestamp类型:
SELECT TO_TIMESTAMP( SUBSTRING(grade_date FROM 1 FOR 10) || 'T04:36:16.000+00:00', 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZH:TZM' ) AS grade_date FROM grades_vs;
SUBSTRING(grade_date FROM 1 FOR 10)提取出日期部分(比如2023-11-18)- 拼接固定的时间后缀
T04:36:16.000+00:00,得到完整的目标字符串 TO_TIMESTAMP搭配对应格式掩码,将字符串转为带时区的timestamp类型(如果不需要时区,可调整格式掩码或转为TIMESTAMP)
场景2:grade_date已是timestamp/timestamptz类型
如果原字段本身就是时间戳类型,直接对日期部分截断后添加固定时间间隔即可:
SELECT (DATE_TRUNC('day', grade_date) + INTERVAL '4 hours 36 minutes 16 seconds')::TIMESTAMPTZ AS grade_date FROM grades_vs;
DATE_TRUNC('day', grade_date)把原时间戳截断到当天0点- 加上指定的时间间隔
4 hours 36 minutes 16 seconds,得到目标时间 - 最后用
::TIMESTAMPTZ确保类型是带时区的timestamp,按需可改为TIMESTAMP
关于你之前的字面量错误
大概率是使用to_timestamp时格式掩码和字符串不匹配导致的,比如没有正确对应时区部分的格式符(TZH:TZM),或者时间部分的格式写错,上面的示例已经匹配了你给出的时间格式,可直接复用。
内容的提问来源于stack exchange,提问作者Tech_Girl7819
相关产品推荐
相关产品推荐

