如果您总是想要昨天的数据,而不是硬编码可以使用的日期:
WHERE LISTING_EOD.DBDATE >= TRUNC(SYSDATE) - 1
AND LISTING_EOD.DBDATE < TRUNC(SYSDATE)
TRUNC(SYSDATE)
今天早上给你午夜,所以如果今天运行它会给出 和 之间的18-Oct-2010 00:00:00
范围18-Oct-2012 23:59:59
。
使用隐式日期格式掩码通常不是一个好主意;您的原始代码假定您NLS_DATE_FORMAT
的设置为DD-MON-YYYY
,但现在可能不正确(如果您在现有选择中看到时间,那么它可能不是),并且将来可能不会。始终使用明确的日期格式掩码,例如TO_DATE('18-OCT-2012', 'DD-MON-YYY')
,以避免歧义和意外行为。
如果该字段实际上是VARCHAR2
而不是DATE
- 这很糟糕 - 那么您需要将日期范围转换为字符串以获得匹配:
WHERE LISTING_EOD.DBDATE >= TO_CHAR(TRUNC(SYSDATE) - INTERVAL '1' DAY, 'DD-MON-YYYY HH24:MI:SS')
AND LISTING_EOD.DBDATE <= TO_CHAR(TRUNC(SYSDATE) - INTERVAL '1' SECOND, 'DD-MON-YYYY HH24:MI:SS')
这将只工作一天,但您在寻找日期范围时会遇到问题。将数据存储在适当类型的列中会更好、更安全。