我想知道在名为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]'
但我什么也没得到。我究竟做错了什么?
我想知道在名为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]'
但我什么也没得到。我究竟做错了什么?
这是什么dbms?有些数据库不允许在like子句中使用正则表达式只是通配符。如果它的oracle可以为mysql检出REGEXP_LIKE或REGEXP。
我会做这样的事情:
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]')
使用等与正则表达式检查你仍然可以在范围索引扫描,如果有一个。
SQL Server支持字符范围。 – 2010-09-06 22:23:42
谢谢杰夫,很高兴知道,我编辑说“有些数据库不” – 2010-09-06 22:33:32
这对我在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]'
SQL标准不支持LIKE中的REGEXP。他们有一个更原始的模式语言。您需要添加一个函数或后期过滤器,或者发现一个DBMS特定的扩展。
MySQL允许您使用REGEXP
关键字而不是LIKE
的正则表达式。我建议如下代码:
SELECT *
FROM `fx1rah00`
WHERE `numtso` REGEXP 'WO[0-9]{13}'
你使用的是什么RDBMS? – 2010-09-06 22:22:34
一些示例数据将有所帮助,以及相关列的数据类型。 – 2010-09-06 22:25:07