我想选择一个以毫秒为单位的TIMESTAMP(6),但同时我需要从该TIMESTAMP中减去3小时(每天0.125天)以将其转换为我的时区。所以我尝试了:
SELECT To_Char(UTCSCANTIME-0.125,'YYYY-MM-DD HH24:MI:SS') AS LOCALSCANTIME
Outcome: 2018-08-01 19:22:39
如果我附加“ FF” 以显示毫秒:
SELECT To_Char(UTCSCANTIME-0.125,'YYYY-MM-DD HH24:MI:SS.FF') AS LOCALSCANTIME
Outcome: ORA-01821: date format not recognized
但是,如果我保留“ FF” ,但我不减去0.125:
SELECT To_Char(UTCSCANTIME,'YYYY-MM-DD HH24:MI:SS.FF') AS LOCALSCANTIME
Outcome: 2018-08-01 22:22:39.259000
我怎样才能做到这两点?
谢谢!
答案 0 :(得分:1)
减去3小时的INTERVAL
而不是0.125。
SELECT To_Char(UTCSCANTIME-INTERVAL '3' HOUR,'YYYY-MM-DD HH24:MI:SS.FF') AS LOCALSCANTIME
减去一个数字,例如0.125,会将结果隐式转换为DATE
,从而损失了小数秒。
另外,请注意,在Oracle中,转换时区比添加和减去间隔更好。