下面的SQL查询

时间:2013-09-12 11:17:02

标签: sql oracle

我有一个要求,即数据库中的一个字段就像

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'))%)');

3 个答案:

答案 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