如何在SQL查询中使用正则表达式

zzl*_*ani 44 regex mysql sql innodb

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

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA[d]%')
Run Code Online (Sandbox Code Playgroud)

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA[0-9]%')
Run Code Online (Sandbox Code Playgroud)

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

trecord
-------
null
Run Code Online (Sandbox Code Playgroud)

好像我执行以下查询

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA%')
Run Code Online (Sandbox Code Playgroud)

它返回

trecord
-------
ALA0000
ALA0001
ALA0002
Run Code Online (Sandbox Code Playgroud)

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

编辑

我正在使用PHP MySQL和innodb引擎来实现它.

Wie*_*314 69

我认为你可以使用REGEXP而不是LIKE

SELECT trecord FROM `tbl` WHERE (trecord REGEXP '^ALA[0-9]')
Run Code Online (Sandbox Code Playgroud)

  • 在正则表达式前面添加 ^。如果您阅读了一些有关正则表达式的内容,您可以用它做任何您想做的事情。祝你好运! (3认同)
  • 好吧,没有`^`它会搜索字符串中的每个地方以找到一个模式.包括它强制从头开始搜索字符串的模式 - 换句话说,字符串必须以模式开始. (2认同)
  • @zzlalani '^' 仅在方括号内表示“不包括”。否则,它的意思是“开始于”。 (2认同)

And*_*rew 6

就我而言(Oracle),它是WHERE REGEXP_LIKE(column, 'regex.*'). 看这里

SQL函数

描述


正则表达式_LIKE

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

...

正则表达式_替换

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

...

REGEXP_INSTR

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

...

REGEXP_SUBSTR

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

(当然,REGEXP_LIKE 仅匹配包含搜索字符串的查询,因此如果您想要完整匹配,则必须使用'^$'开头 ( ^) 和结尾 ( $) 匹配,例如: 。'^regex.*$'