首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLPLus与SQLDeveloper行为

SQLPLus与SQLDeveloper行为
EN

Stack Overflow用户
提问于 2016-09-20 11:18:00
回答 2查看 830关注 0票数 1

我在SQLPlus和SQLPlus之间经历了一种不同的行为。

示例数据:

代码语言:javascript
复制
create table test (
  INIT_DATE DATE
);

INSERT INTO test(INIT_DATE) values (sysdate);
COMMIT;

现在我运行以下查询(注意,我们正在执行一个不必要的to_date,因为INIT_DATE已经是一个日期):

代码语言:javascript
复制
select to_date(INIT_DATE, 'dd/mm/rrrr') from test;

结果是:

  • SQLPlus =>返回20/09/16
  • SQLDeveloper =>掷ORA-01861

我找到了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再次返回一个错误:

代码语言:javascript
复制
select to_date(INIT_DATE, 'DD/MM/RR') from test;
  • 有人能解释一下这种行为吗?
  • 如果查询掩码为“DD/MM/RR”,而NLS为“DD/MM/RR”时,为什么SQLDeveloper抛出一个错误?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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;

票数 1
EN

Stack Overflow用户

发布于 2016-09-20 11:37:17

使用TO_CHAR而不是TO_DATETO_DATE函数以第二个参数给定的特定格式将char参数转换为日期值。

你的陈述

代码语言:javascript
复制
select to_date(INIT_DATE, 'DD/MM/RR') from test;

执行第一次隐式转换为char,因为INIT_DATE是日期。此转换为nls默认格式,具体取决于计算机设置。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39592678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档