很抱歉,我在SQL中非常环保。
我目前正在尝试运行以下内容:
SELECT *
FROM test.message
WHERE MESSAGESUBJECT LIKE '%test%'
AND MESSAGEDATE = CURRENT_DATE
但是结果并没有回落-认为这是当前字段中数据格式如下的事实:
07-MAR-19 08.13.53.00000000 PM
因此,显而易见的解决方案是让它查看字段的开头-我正在迷失的方向是我需要查询每天运行的作业,因此我不能使用精确值。有人可以协助吗?
谢谢
D。
答案 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)
上具有基于函数的索引,那么最后一种方法也是一种合理的选择。