我正在使用此查询
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)将时间戳转换为迄今为止的时间戳,请在TIMESTAMP WITH TIME ZONE
上使用at 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;
请参阅更多信息:
- Oracle用TimeZone转换为日期的时间戳
由于您希望以格式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;