处理< = for Oracle中的日期

时间:2017-11-09 21:30:30

标签: oracle

所以我在Oracle中遇到了一个奇怪的事情,我有以下SQL语句。

Select *
From tblApplicationMessage
Where cntApplicationMessageType = 1
  AND ysnActive = 1
  AND (dtmValidStart IS NULL OR dtmValidStart <= '09 Nov 2017')
ORDER BY cntApplicationMessage desc;

传递日期为2017年11月9日&#39;。目前的日期是一样的。显然,这两者应该等同于&#34; =&#34; SQL的一部分。

如果真的这样,我应该从我的DB收到13条记录(今天输入了一条记录(&#39; 2017年11月9日和#39;))。相反,我收到12条记录,而今天找不到的记录。

当我将格式更改为使用to_date时,我收到了类似的问题,即使在回拨到2017年11月8日23:59:59&#39;。

我的问题很简单:有没有更好的方法在Oracle中进行日期比较?

更新:似乎有些人不擅长阅读并继续建议我使用to_date进行比较。让我再次(我以前曾说过)就在这里,这样他们就可以得到关于我所说的......

我尝试使用to_date进行比较。每当我这样做,我仍然没有得到我预期的结果。相反,我仍会收到12条记录。

即使在将日期回滚到to_date(&#39; 08年11月17日23:59:59&#39;,&#39; dd yyhh24:mi:ss&#39;)之后,它仍然无效。我将日期进一步推迟到11月1日,但仍然没有做任何事情。

我终于放弃了这一尝试,因为它没有用。

最后的想法,因为我现在已经看过这两三次了:

使用to_date DID NOT WORK!不要太粗鲁,但是在它没有工作之前说过两三次之后,我会认为其他人会接受这样的事实: #39;在这种情况下为我工作......

什么工作并被接受为答案是使用TRUNC。它让我得到了我想要的结果。我会注意找到一个更好的解决方案,但它现在正是它的工作原理。

1 个答案:

答案 0 :(得分:1)

如果您查询:

 select * from SYS.NLS_SESSION_PARAMETERS

您会看到日期格式包含日期和时间,例如:

 'DD-MM-YYYY HH24:MI:SS' 

所以'2017年11月09日'将相当于09-11-2017 00:00:00。比较日期时,您提供的值将隐式转换为包含时间的格式。您应该在查询时考虑到这一点,或者例如在比较日期列时使用TRUNC函数。