Sql TO_DATE函数不适用于时区信息。

Sql TO_DATE函数不适用于时区信息。,sql,oracle,to-date,Sql,Oracle,To Date,我在下面尝试: SELECT TO_CHAR( TO_DATE('Wed May 18 00:00:00 IST 2016', 'DY MON DD HH24:MI:SS TZR YYYY'),'DD-MM-YYYY') FROM DUAL; 预计2016年5月18日 但是上面写着-01821。00000-“无法识别日期格式” 如果我删除IST和相应的TZR,效果会很好 出什么问题了?Oracle日期数据类型。普通时间戳也不能。您需要转换为具有时区的TimeTemp: SELECT TO_CH

我在下面尝试:

SELECT TO_CHAR( TO_DATE('Wed May 18 00:00:00 IST 2016', 'DY MON DD HH24:MI:SS TZR YYYY'),'DD-MM-YYYY') FROM DUAL;
预计2016年5月18日

但是上面写着-01821。00000-“无法识别日期格式”

如果我删除IST和相应的TZR,效果会很好

出什么问题了?

Oracle日期数据类型。普通时间戳也不能。您需要转换为具有时区的TimeTemp:

SELECT TO_CHAR(TO_TIMESTAMP_TZ('Wed May 18 00:00:00 IST 2016',
  'DY MON DD HH24:MI:SS TZR YYYY', 'NLS_DATE_LANGUAGE=ENGLISH'),
  'DD-MM-YYYY')
FROM DUAL;
但IST不是一个公认的时区区域,因此仍然会得到ORA-01882:未找到时区区域。您可能必须用已知区域明确替换该区域,例如:

SELECT TO_CHAR(TO_TIMESTAMP_TZ(REPLACE('Wed May 18 00:00:00 IST 2016',
  'IST', 'Asia/Calcutta'), 'DY MON DD HH24:MI:SS TZR YYYY', 'NLS_DATE_LANGUAGE=ENGLISH'),
  'DD-MM-YYYY')
FROM DUAL;

TO_CHAR(TO
----------
18-05-2016
或者,如果您不想对其进行任何操作,并且仍然想要IST年,则可以直接从字符串中提取日期组件,或者将IST视为固定值,而不尝试解释它:

SELECT TO_CHAR(TO_DATE('Wed May 18 00:00:00 IST 2016',
  'DY MON DD HH24:MI:SS "IST" YYYY', 'NLS_DATE_LANGUAGE=ENGLISH'),
  'DD-MM-YYYY')
FROM DUAL;

TO_CHAR(TO
----------
18-05-2016
。。。但这可能不适合你的实际情况