我想在名为NUMTSO的列中知道是否存在具有此格式“WO #############”的数据,所以我正在做的是:
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 :(得分: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]'
答案 1 :(得分:1)
MySQL允许您使用REGEXP
关键字而不是LIKE
的正则表达式。我建议使用以下代码:
SELECT *
FROM `fx1rah00`
WHERE `numtso` REGEXP 'WO[0-9]{13}'
答案 2 :(得分:0)
这是什么dbms?有些数据库不允许在like子句中使用正则表达只使用通配符。如果是oracle,你可以查看REGEXP_LIKE或REGEXP以获取mysql。
我会做类似的事情:
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]')
通过使用like和regex检查,如果有索引,你仍然可以对索引进行范围扫描。
答案 3 :(得分:0)
SQL标准不支持LIKE中的REGEXP。他们有一种更原始的模式语言。您需要添加一个函数或后过滤器,或发现特定于DBMS的扩展。