我有一个要求,即数据库中的一个字段就像
select distinct workorder_ref,workorder_tag from repository.tblworkorder a
where REGEXP_LIKE (workorder_tag,'^20130912');
它给了我输出,
workorder_ref workorder_tag
AJYAMOI 20130912-050226
AJYAXDX 20130912-085750
AJYAXEC 20130912-085753
AJYBLGT 20130912-102759
但正如你们在查询中所看到的那样,我在例子中硬编了日期yyyymmdd格式(20130912)。 那么有什么方法可以解决这个问题吗?我在想下面的东西,但没有用。
select distinct workorder_ref from repository.tblworkorder a where REGEXP_LIKE
(workorder_tag,'((to_char(sysdate,'YYYYMMDD'))%)');
答案 0 :(得分:3)
尝试使用此条件:
where workorder_tag like to_char(sysdate, 'yyyymmdd') || '%'
答案 1 :(得分:1)
您已将引号'....'
中的to_char()括起来,使其成为字符串:'((to_char(sysdate,'YYYYMMDD'))%)'
。您需要正确放置引号。
使用REGEXP_LIKE()时,必须使用.*
而不是%
,因为它执行正则表达式匹配,而不是LIKE执行的简单%
模式匹配。
更正版本:
select distinct workorder_ref from repository.tblworkorder a
where REGEXP_LIKE(workorder_tag, to_char(sysdate,'YYYYMMDD') || '.*');
但在你的简单案例中你可以使用LIKE:
select distinct workorder_ref from repository.tblworkorder a
where workorder_tag LIKE to_char(sysdate,'YYYYMMDD')|| '%';
答案 2 :(得分:0)
在 SQL Server 中,我认为函数GETDATE()
可以解决您的问题。
或 MySQL
中的函数NOW()
Oracle 中的 SYSDATE