我正在使用此查询
SELECT CAST(TO_TIMESTAMP_TZ(REPLACE('1970-01-01T00:00:00-08:00', 'T', ''),
'YYYY-MM-DD HH:MI:SS TZH:TZM') AS DATE) DOB FROM dual;
输出是
ORA-01849:小时必须介于1到12 01849之间.00000 - “小时必须介于1到12之间”
我只需将输出作为MM/DD/YYYY
时间格式是24小时,因此修复是使用HH24
而不是HH
。
SELECT CAST(TO_TIMESTAMP_TZ(
REPLACE('1970-01-01T00:00:00-08:00', 'T', ''),
'YYYY-MM-DD HH24:MI:SS TZH:TZM') AS DATE) DOB
FROM dual;
但不是使用替换,您可以在模式中使用文字"T"
:
SELECT CAST(
TO_TIMESTAMP_TZ('1970-01-01T00:00:00-08:00',
'YYYY-MM-DD"T"HH24:MI:SS TZH:TZM')
AS DATE) DOB FROM dual;
请注意,演员表只会删除时区信息。如果您需要将时间戳转换为特定时区的日期(例如+04:00),请在at time zone
上使用TIMESTAMP WITH TIME ZONE
子句:
SELECT CAST(
TO_TIMESTAMP_TZ('1970-01-01T00:00:00-08:00',
'YYYY-MM-DD"T"HH24:MI:SS TZH:TZM')
at time zone '+04:00' AS DATE) DOB FROM dual;
更多信息请访问:
由于您希望以MM/DD/YYYY
格式输出,因此请直接在时间戳上使用to_char:
SELECT to_char(
TO_TIMESTAMP_TZ('1970-01-01T00:00:00-08:00',
'YYYY-MM-DD"T"HH24:MI:SS TZH:TZM')
at time zone '+04:00', 'MM/DD/YYYY') DOB FROM dual;