oracle sql 中的日期时间比较 - sql Developer

问题描述 投票:0回答:1

我正在尝试运行查询并想要验证我正在使用的日期条件。 TO_DATE('01/01/2016 00:00:00','MM/DD/YYYY HH24:MI:SS') 与 TO_DATE('01/01/2016','MM/DD/YYYY') 相同?这将是我试图验证的开始日期。我在 sql Developer 中使用 oracle sql。

谢谢

oracle-sqldeveloper
1个回答
0
投票

是的,它们是相同的。正如文档中一个稍微晦涩的地方提到的:

在日期列中:

默认时间为中午 12:00:00 (午夜)。
    默认时间适用于列中没有时间部分的任何值,因为未指定时间部分或因为值被截断。

  • 默认日期是当月的第一天。
  • 默认日期适用于列中没有日期部分的任何值,因为未指定任何日期部分。

这种措辞令人困惑,因为 DATE 值始终包含日期和时间部分,即使您的客户端没有显示它们。但该部分中的示例显示了您真正要问的内容,使用
to_date()

而不指定所有元素。

因此,

TO_DATE('01/01/2016 00:00:00','MM/DD/YYYY HH24:MI:SS')

TO_DATE('01/01/2016','MM/DD/YYYY')
都代表相同的DATE值。您可以通过显示两者的完整值,或者使用
dump()
来查看内部表示是相同的:
alter session set nls_date_format = 'SYYYY-MM-DD HH24:MI:SS'

select TO_DATE('01/01/2016 00:00:00','MM/DD/YYYY HH24:MI:SS'),
  dump(TO_DATE('01/01/2016 00:00:00','MM/DD/YYYY HH24:MI:SS'), 1016)
from dual;

TO_DATE('01/01/201600:00:00','MM/DD/YYYYHH24:MI:SS') 2016-01-01 00:00:00
转储(TO_DATE('01/01/201600:00:00','MM/DD/YYYYHH24:MI:SS'),1016)
Typ=13 Len=8: e0,7,1,1,0,0,0,0
select TO_DATE('01/01/2016','MM/DD/YYYY'), dump(TO_DATE('01/01/2016','MM/DD/YYYY'), 1016) from dual;

TO_DATE('01/01/2016','MM/DD/YYYY') 2016-01-01 00:00:00
转储(TO_DATE('01/01/2016','MM/DD/YYYY'),1016)
Typ=13 Len=8: e0,7,1,1,0,0,0,0
小提琴

您还可以使用日期文字,如

date '2016-01-01

,或者如果您需要指定时间,则将时间戳文字转换为日期,如

cast(timestamp '2016-01-01 00:00:00' as date
。它们也代表相同的日期值 -
fiddle

© www.soinside.com 2019 - 2024. All rights reserved.