To_char和to_date返回不同的输出



我使用以下查询:

select sysdate from dual where to_char(sysdate,'DD-MM-YY')='28-MAY-13';

,输出为空。但对于下面的查询,输出是当前日期。

select sysdate from dual where to_date(sysdate,'DD-MM-YY')= to_date('28-MAY-13','DD-MM-YY');

为什么to_char函数不能返回sysdate?

我们不应该使用to_char来比较日期吗?

关于:我们不应该使用to_char来比较日期吗?

不,我们不应该。为了显示,我们应该使用to_char来格式化日期。如果你心里还有其他的理由,那可能是个坏主意。

在oracle中比较日期时,请记住oracle日期包括时间。查看某个值是否在日期范围内的最佳方法是:

where myDateField >= date1
and myDateField < the day after date2

当你的日期范围是今天时,这样做:

where myDateField >= trunc(sysdate)
and myDateField < trunc(sysdate + 1 )

如果要将其与字符串类型的输入参数进行比较,请使用to_date将字符串转换为日期,然后实现相同的一般思路。

尝试将'DD-MON-YY'格式映射到'28-MAY-13'

'MM'对应月份。

编辑:SQL可以计算出使用正确的格式在to_date;当它看到输入字符串是'28-MAY-13'格式时,自动将'DD-MM-YY'转换为'DD-MON-YY'。然而,To_char不做任何假设;所以它试图比较"28-05-13"one_answers"28-may5-13"

EDIT2:一个额外的注意是DUAL只能返回一行;所以你可以直接输入

 SELECT sysdate FROM DUAL

Dan Bracuk有一些关于日期比较的好观点;如果可能的话,保持日期格式。使用trunc(DateTime)如果只有日期重要,而不是时间;如果你使用'=',这通常是必要的,但如果你检查BETWEEN

,这通常是不必要的

相关内容

  • 没有找到相关文章

最新更新