【问题标题】:How to regex in a MySQL query如何在 MySQL 查询中进行正则表达式
【发布时间】:2013-09-17 18:43:17
【问题描述】:

我有一个简单的任务,我需要搜索以字符串字符开头并在其后有一个数字的记录。我正在尝试的是这个

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA[d]%')

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA[0-9]%')

但是这两个查询总是返回 null 记录

trecord
-------
null

好像我在哪里执行以下查询

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA%')

返回

trecord
-------
ALA0000
ALA0001
ALA0002

这意味着我有以 ALA 开头和后面一个数字的记录,

编辑

具体来说,我正在使用 PHP MySQL 和 innodb 引擎。

【问题讨论】:

  • 请始终使用您使用的数据库引擎标记您的问题。我只能猜测是 MySQL。
  • LIKE 不支持正则表达式。唯一支持的通配符是 %_(至少在标准 SQL 和 MySQL 中)

标签: mysql sql regex innodb


【解决方案1】:

我认为你可以使用 REGEXP 代替 LIKE

SELECT trecord FROM `tbl` WHERE (trecord REGEXP '^ALA[0-9]')

【讨论】:

  • 但它会搜索ALA101BALA002之类的记录,我只想搜索ALA101
  • 在正则表达式前面添加了 ^。如果您阅读一些有关正则表达式的信息,您可以使用它做任何您想做的事情。祝你好运!
  • 谢谢@Wietze314 我的正则表达式有点弱,谢谢
  • 好吧,如果没有^,它将搜索字符串中的每个位置以查找模式。包括它强制仅从头开始搜索字符串的模式 - 换句话说,字符串必须以模式开头。
  • @zzlalani ^ 在方括号内仅表示“不包括”。否则,它的意思是“开始于”。
【解决方案2】:

就我而言(Oracle),它是WHERE REGEXP_LIKE(column, 'regex.*')。见here

SQL 函数

说明


REGEXP_LIKE

此函数在字符列中搜索模式。用这个 查询的 WHERE 子句中的函数以返回匹配的行 您指定的正则表达式。

...

REGEXP_REPLACE

此函数在字符列中搜索模式并 用您指定的模式替换该模式的每次出现。

...

REGEXP_INSTR

此函数在字符串中搜索给定出现的正则 表达模式。您指定要查找的事件并 要搜索的起始位置。该函数返回一个整数 指示在字符串中找到匹配项的位置。

...

REGEXP_SUBSTR

此函数返回与正则匹配的实际子字符串 您指定的表达式模式。

(当然,REGEXP_LIKE 只匹配包含搜索字符串的查询,所以如果你想要一个完整的匹配,你必须使用'^$'作为开始(^)和结束($) 匹配,例如:'^regex.*$'.)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    相关资源
    最近更新 更多