如何过滤其中包含当前日期的记录

时间:2016-05-05 15:23:07

标签: sql oracle

我正在尝试获取file_name列值包含YYYY-MM-DD格式的当前日期的记录。例如,如果我的表有:

abcd_2016-05-06.txt 
asd-2016-05-04.txt
axx_2016-05-03.txt

我在2016-05-06运行查询,我只希望在结果集中获得abcd_2016-05-06.txt。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

如果您想要匹配系统的当前日期,可以使用系统中的当前日期。这适用于Oracle,但其他数据库可能有不同的方法。

SELECT file_name
FROM MY_FILES
WHERE file_name LIKE '%' || TO_CHAR(SYSDATE, 'RRRR-MM-DD') || '.txt'

然而,这往往是一个糟糕的决定。这意味着代码将永远不会在除当前系统日期之外的任何日期工作。将日期作为参数传递或从另一个表中获取它会好得多。

答案 1 :(得分:0)

您可以使用

显示的格式将当前日期转换为字符串
to_char(sysdate, 'YYYY-MM-DD')

然后,您可以使用通配符连接它以形成类似'%2016-05-05%'的值;然后使用the like pattern-matching condition找到与该通配字符串匹配的任何值:

select file_name    -- or count(*), or whatever columns you want
from your_table
where file_name like '%' || to_char(sysdate, 'YYYY-MM-DD') || '%';

答案 2 :(得分:0)

like通配符配对的%运算符可以为您提供帮助。

select file_name 
from my_files
where file_name like '%2016-05-06%'

以上查询select来自my_files table的所有文件名,其中包含'%%'之间的字符串。

如果你得到这些文件的数量,那么你需要这样的东西:

select count(*)
from my_files
where file_name like '%2016-05-06%'