2010-09-06 153 views
1

我想知道在名为NUMTSO的列中是否存在具有这种格式的数据“WO #############”,所以我现在所做的是:使用LIKE的SQL语句

select * 
from fx1rah00 
where numtso like 'WO[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 

但我什么也没得到。我究竟做错了什么?

+5

你使用的是什么RDBMS? – 2010-09-06 22:22:34

+3

一些示例数据将有所帮助,以及相关列的数据类型。 – 2010-09-06 22:25:07

回答

0

这是什么dbms?有些数据库不允许在like子句中使用正则表达式只是通配符。如果它的oracle可以为mysql检出REGEXP_LIKEREGEXP

我会做这样的事情:

where NUMTSO like 'WO%' 
and REGEXP_LIKE(NUMTSO, 'WO[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') 

使用等与正则表达式检查你仍然可以在范围索引扫描,如果有一个。

+0

SQL Server支持字符范围。 – 2010-09-06 22:23:42

+0

谢谢杰夫,很高兴知道,我编辑说“有些数据库不” – 2010-09-06 22:33:32

1

这对我在SQL Server中正常工作。如果您不使用SQL Server,则可能需要一些不同的语法,因为模式语法不是标准SQL。

;with fx1rah00 As 
(
select 'WO1234567890123' as numtso 
) 
select * 
from fx1rah00 
where numtso like 
      'WO[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 
0

SQL标准不支持LIKE中的REGEXP。他们有一个更原始的模式语言。您需要添加一个函数或后期过滤器,或者发现一个DBMS特定的扩展。

1

MySQL允许您使用REGEXP关键字而不是LIKE的正则表达式。我建议如下代码:

SELECT * 
    FROM `fx1rah00` 
WHERE `numtso` REGEXP 'WO[0-9]{13}'