我在SQLPlus和SQLPlus之间经历了一种不同的行为。
示例数据:
create table test (
INIT_DATE DATE
);
INSERT INTO test(INIT_DATE) values (sysdate);
COMMIT;现在我运行以下查询(注意,我们正在执行一个不必要的to_date,因为INIT_DATE已经是一个日期):
select to_date(INIT_DATE, 'dd/mm/rrrr') from test;结果是:
我找到了this answer,所以在SQLDeveloper中,我将NLS>Format日期更改为'DD/MM/RR‘,现在SQLDeveloper返回20/09/16。
但是,如果在SQLDeveloper中我再次将NLS更改为'DD/MM/RR an 24:MI:SS‘,并且将查询掩码更改为'DD/MM/RR',则SQLDeveloper再次返回一个错误:
select to_date(INIT_DATE, 'DD/MM/RR') from test;发布于 2016-09-20 12:17:22
您尝试通过TO_DATE函数转换日期到日期,但是TO_DATE函数参数是字符串,因此Oracle将INIT_DATE列转换为string,然后将该字符串传递给TO_DATE函数。
如果使用隐式转换“string”或“date”,则Oracle使用默认日期格式。在不同的环境中,默认日期格式可能不同。
尝试使用显式转换和适当的格式。例如:
select to_date(to_char(INIT_DATE, 'dd/mm/rrrr'), 'dd/mm/rrrr') from test;
发布于 2016-09-20 11:37:17
使用TO_CHAR而不是TO_DATE。TO_DATE函数以第二个参数给定的特定格式将char参数转换为日期值。
你的陈述
select to_date(INIT_DATE, 'DD/MM/RR') from test;执行第一次隐式转换为char,因为INIT_DATE是日期。此转换为nls默认格式,具体取决于计算机设置。
https://stackoverflow.com/questions/39592678
复制相似问题