Oracle SQL今天从数据开始的日期

时间:2019-03-07 13:38:57

标签: sql oracle

很抱歉,我在SQL中非常环保。

我目前正在尝试运行以下内容:

SELECT * 
FROM test.message 
WHERE MESSAGESUBJECT LIKE '%test%'
AND MESSAGEDATE = CURRENT_DATE

但是结果并没有回落-认为这是当前字段中数据格式如下的事实:

07-MAR-19 08.13.53.00000000 PM

因此,显而易见的解决方案是让它查看字段的开头-我正在迷失的方向是我需要查询每天运行的作业,因此我不能使用精确值。有人可以协助吗?

谢谢

D。

1 个答案:

答案 0 :(得分:0)

 SELECT * 
 FROM test.message 
 where MESSAGESUBJECT like '%test%' 
 and MESSAGEDATE BETWEEN TRUNC(CURRENT_DATE) AND TRUNC(CURRENT_DATE) + 86399/86400

这将获得行中消息日期是今天任何时候的行。

86399/86400位是一天中的秒数减去1,因此它使BETWEEN范围覆盖整天,而第二天则不覆盖(TRUNC(CURRENT_DATE)+1可以)。

有些人发现添加一整天然后减去1秒的INTERVAL而不是添加86399/86400。这样做也可以,

AND MESSAGEDATE >= TRUNC(SYSDATE)
AND MESSAGEDATE < TRUNC(SYSDATE)+1  -- Thanks @WernfriedDomscheit

使用

AND TRUNC(MESSAGEDATE) = TRUNC(CURRENT_DATE)

在逻辑上是正确的,但如果有索引,Oracle便无法使用MESSAGEDATE上的索引,这可能会使您失去最佳性能。但是,如果您在TRUNC(MESSAGEDATE)上具有基于函数的索引,那么最后一种方法也是一种合理的选择。