首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle SQL Developer日期不同格式的两个日期之间的差异

Oracle SQL Developer日期不同格式的两个日期之间的差异
EN

Stack Overflow用户
提问于 2018-10-05 12:16:38
回答 2查看 845关注 0票数 0

我在使用SQL DEVELOPER时遇到了一个奇怪的问题,我有两个日期,我想得到两者的区别;但是,我得到的结果不准确……

我有:

代码语言:javascript
运行
复制
 column1 with the date 03-Aug-2016
 column2 with the date 08-July-2016

当将to_date函数与以下内容一起使用时:

to_date(column1, 'dd-mon-yyyy') ==>日期显示为03-Aug-2016

但是column2是不同的故事,因为它给出了以下内容:

to_date(column2, 'dd-mon-yyyy') ==>日期显示为10-7月-2016年7月

但是当使用to_date(column2, 'dd-mon-RR') ==>时,日期显示为08-7-2016。

当我在查询中使用以下内容时,我会得到一个奇怪的数字

to_date(column1, 'dd-mon-yyyy') - to_date(column2, 'dd-mon-RR') ==> -730463

你的帮助真的很感激!

EN

回答 2

Stack Overflow用户

发布于 2018-10-05 13:10:36

问题在于,您正在尝试使用TO转换已经是日期的列。

TO_DATE将CHAR、VARCHAR2、NCHAR或NVARCHAR2数据类型的字符转换为日期数据类型的值。

由于您已经以DATE类型提供了第一个参数,所以Oracle将使用会话的NLS参数隐式地将其转换为字符串。

因此,to_date(column2, 'dd-mon-yyyy')相当于

代码语言:javascript
运行
复制
SELECT TO_DATE(TO_CHAR(DATE '2016-07-08', ( -- 08-July-2016
     SELECT value
     FROM nls_session_parameters
     WHERE parameter = 'NLS_DATE_FORMAT' 
) ),'dd-mon-yyyy')
FROM dual

10-jul-16是您从上面看到的(同样由于会话的NLS格式),但它实际上是10-jul-0016而不是10-Jul-2016

而表达式08-jul-2016.的计算值为to_date(column2, 'dd-mon-RR')。这是因为如果我没有错的话,您的NLS_DATE_FORMAT设置为'DD-MON-RR'

所以,你看到的奇怪的数字是这两个日期的区别。

如果您想确认,只需运行这个。也就是说,将日期文字减去纯日期,而不进行转换。

代码语言:javascript
运行
复制
SELECT DATE '0016-08-03' - DATE '2016-07-08' FROM dual;--  -730461
票数 1
EN

Stack Overflow用户

发布于 2018-10-05 12:30:47

你试过用

代码语言:javascript
运行
复制
to_date(column1, 'dd-mon-RRRR') - to_date(column2, 'dd-mon-RRRR')

当你在约会时,总是使用RRRR。这将确保具有按照y2k的日期格式。

如果这不能解决您的问题,请共享这些Column1和Column2的列类型

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

https://stackoverflow.com/questions/52665444

复制
相关文章

相似问题

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