如何在LIKE命令中传递SYSDATE以筛选当日数据
提取Oracle表中当日数据的解决方案
嘿,我来帮你搞定这个需求!你已经通过SELECT SYSDATE FROM DUAL拿到了当前日期19-JUL-19,现在要从表中筛选出当天的所有数据对吧?下面给你两种可行的方法:
方法一:使用LIKE匹配日期部分
因为你的CollectionDate字段包含完整的时间戳,我们可以把SYSDATE转换成和日期前缀一致的字符串,再用LIKE匹配后面的时间部分:
SELECT ID, MSG_TYPE, CollectionDate FROM your_table_name -- 记得替换成你的实际表名 WHERE CollectionDate LIKE TO_CHAR(SYSDATE, 'DD-MON-RR') || '%';
这个语句会把SYSDATE格式化为DD-MON-RR(也就是19-JUL-19这样的格式),然后通过%匹配任意后续的时间内容,就能精准拿到当天的所有记录。
方法二:更推荐的日期函数方式(效率更高)
用LIKE处理日期类型字段可能受NLS格式影响,而且如果字段有索引的话效率不如直接用日期函数。推荐下面两种更稳妥的写法:
用TRUNC截断时间
TRUNC函数会把日期的时间部分截断为0点,直接比较日期部分即可:
SELECT ID, MSG_TYPE, CollectionDate FROM your_table_name WHERE TRUNC(CollectionDate) = TRUNC(SYSDATE);
用日期范围匹配(最优性能)
如果CollectionDate字段有索引,这种写法可以利用索引,性能更好:
SELECT ID, MSG_TYPE, CollectionDate FROM your_table_name WHERE CollectionDate >= TRUNC(SYSDATE) AND CollectionDate < TRUNC(SYSDATE) + 1;
这个语句匹配的是从当天0点开始,到次日0点前的所有数据,完全覆盖当天的所有时间戳。
不管用哪种方法,最终都会得到你期望的结果:
ID MSG_TYPE CollectionDate
515588 GenOut 19-JUL-19 01.06.15.307068000 PM
515590 GenOut 19-JUL-19 12.03.09.873288000 PM
内容的提问来源于stack exchange,提问作者Kartik M
相关产品推荐
相关产品推荐

