【问题标题】:SQL Like statement with regular expressions带有正则表达式的 SQL Like 语句
【发布时间】:2014-06-18 16:28:02
【问题描述】:

我的表格包含一些带有 ; 分隔数字的列,如下所示:

1;2;43;22;20;12

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

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

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

我得到所有包含“1”的结果,而不仅仅是“1”,所以我也得到了 11、14、110、1999 等。 我想我需要使用某种正则表达式,但我在这里迷路了......谁能帮忙?

【问题讨论】:

  • 您使用的是什么 DBMS? SQL 服务器? PostgreSQL?甲骨文? SQLite? MySQL?
  • 我用的是Mysql,不好意思忘了说!

标签: mysql regex sql-like


【解决方案1】:

你可能不需要正则表达式

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

【讨论】:

  • 关于如何将其转换为 MySQL 的任何帮助?
  • 我对 mySQL 的了解不够明确。您可以通过stackoverflow.com/questions/1009954/… 在这里尝试答案,它不按书面说明工作吗? (只是好奇)
  • SET= 之前不带:,这是在使用SELECT 定义变量时
  • @FélixGagnon-Grenier 所以应该是这样吗? (已编辑)我上面评论中的示例使用 :=SET
  • 感谢这个答案:WHERE concat(';',Table,';') LIKE concat('%;', '".$search_var."' , ';%')
【解决方案2】:

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

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

【讨论】:

  • 什么 RDBMS 允许在 LIKE 子句中使用正则表达式?他们中的大多数都有一个单独的功能。此外,如果 Nameonly 一个周围没有填充的数字,则您的示例将失败。
  • 编辑了表名和列名。这适用于 SQL Server。阅读这篇文章technet.microsoft.com/en-us/library/ms187489(v=sql.105).aspx
猜你喜欢
  • 2021-07-11
  • 2011-03-16
  • 1970-01-01
  • 2011-08-21
  • 2023-04-02
  • 1970-01-01
  • 2016-10-10
  • 2021-04-22
  • 1970-01-01
相关资源
最近更新 更多