带有正则表达式的SQL Like语句

时间:2014-06-18 16:28:03

标签: mysql regex sql-like

我的表中包含一些列; - 分隔的数字如下:

1;2;43;22;20;12

等等。也可能此列中只有1个数字,如110,或2个数字,例如110;143

我想在此列中选择包含特定数字的行。该数字位于变量$ search_var中。 假设我需要在我的专栏中搜索数字1。如果我使用像这样的select语句:

"SELECT * FROM Table WHERE ids LIKE '%".$search_var."%'"

我得到的所有结果都包含'1'而不仅仅是'1',所以我也得到11,14,110,1999等。 我想我需要使用某种正则表达式语句,但我迷失在这里......谁可以帮忙?

2 个答案:

答案 0 :(得分:2)

你可能不需要这个

的正则表达式
Set @YourNUmber := 110;

SELECT * 
FROM Table 
WHERE ';' + ids + ';' LIKE '%;'+ @yourNumber + ';%'

这可以保证所有数字始终;

这是针对SQL Server格式化的。如果您使用其他东西,变量语法和通配符可能会有所不同。

编辑:

感谢@FélixGagnon-Grenier的建议。我认为这两者中的任何一个都可行。请参阅此处查看SQL Fiddle example

SELECT * 
FROM T 
WHERE concat(';',ids,';') LIKE concat('%;', @YourNumber , ';%');


SELECT * 
FROM T 
WHERE LOCATE(concat(';', @YourNumber , ';'),concat(';',ids,';'))>0

答案 1 :(得分:0)

如果您使用的是SQL Server,请尝试使用此解决方案。这将搜索相邻字符不是数字的数字:

SELECT * FROM Table WHERE ids LIKE '%[^0-9]".$search_var."[^0-9]%'