使用LIKE的SQL语句

时间:2010-09-06 22:16:15

标签: sql sql-like

我想在名为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]'

但我一无所获。我做错了什么?

4 个答案:

答案 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_LIKEREGEXP以获取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的扩展。