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

Oracle SQL Developer日期不同格式的两个日期之间的差异,oracle,oracle-sqldeveloper,Oracle,Oracle Sqldeveloper,我在使用SQL DEVELOPER时遇到了一个奇怪的问题,我有两个日期,我想知道它们之间的区别;然而,我得到了不准确的结果 我有: column1 with the date 03-Aug-2016 column2 with the date 08-July-2016 使用至日期功能时,请执行以下操作: 截止日期(第1列,'dd mon yyyy')==>日期显示为2016年8月3日 但第2栏则不同,因为它给出了以下内容: 截止日期(第2列,'dd-mon-yyyy')==>日期显示为20

我在使用SQL DEVELOPER时遇到了一个奇怪的问题,我有两个日期,我想知道它们之间的区别;然而,我得到了不准确的结果

我有:

 column1 with the date 03-Aug-2016
 column2 with the date 08-July-2016
使用
至日期
功能时,请执行以下操作:

截止日期(第1列,'dd mon yyyy')
==>日期显示为
2016年8月3日

但第2栏则不同,因为它给出了以下内容:

截止日期(第2列,'dd-mon-yyyy')
==>日期显示为2016年7月10日

但是当使用
to_date(第2列,'dd-mon-RR')
==>时,日期显示为2016年7月8日

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

截止日期(第1列“dd-mon-yyyy”)-截止日期(第2列“dd-mon-RR”)
==>-730463


非常感谢你的帮助

您是否尝试过使用

to_date(column1, 'dd-mon-RRRR') - to_date(column2, 'dd-mon-RRRR')
在处理日期时,始终使用RRRR。这将确保日期格式符合y2k


如果这并不能解决您的问题,请共享这些Column1和Column2的列类型。问题是您正在尝试使用转换一个已经是日期的列

TO_DATE
转换char、VARCHAR2、NCHAR或NVARCHAR2的字符 数据类型设置为日期数据类型的值

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

因此,
to_date(第2列,'dd-mon-yyyy')
相当于

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

而迄今为止的表达式(第2列,'dd mon RR')的计算结果为2016年7月8日。这是因为如果我没有错的话,您的
NLS\u DATE\u格式
被设置为
'DD-MON-RR'

所以,你看到的奇怪数字是两个日期之间的差异

如果要确认,只需运行此命令。i、 e.减去日期文字作为纯日期,不进行转换

SELECT DATE '0016-08-03' - DATE '2016-07-08' FROM dual;--  -730461

column1和column2的数据类型是什么。如果它已经是日期,您不应该在它上面应用
到_date
。两者都是日期;然而,当我应用减法时,它给出-730463.4请检查我的答案,并接受/支持你认为对你有帮助的投票。请阅读:stackoverflow.com/help/someone-answers了解它的重要性。感谢您的帮助。我试过了,它给了我24天(应该是26天),但作为第1栏,结果是2016年8月1日,而不是第3日。并且这两列都有“日期”和数据类型。如果两列都是日期,则只需使用Column1-column2为什么将其重铸为日期。如果您想省去时间,请使用Trunc(第1列)-Trunc(第2列)谢谢!我明白了,我试着直接减法,因为它们已经是日期格式了;但是,这个数字在天内仍然没有显示。@user2597012:您看到了什么?我看到了-730463,这就是显示的数字。OK,这意味着它存储不正确?。当您运行
选择to_char(第1列,'yyyy-mm-dd')、to_char(第2列,'yyyy-mm-dd')…
时,您会看到什么?另外,如果参数为“nls\U日期\u格式”I获得0016-08-01和2016-07-08,则从nls\U会话\u参数中选择值的o/p是多少。