60

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

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 引擎来做这件事。

4

2 回答 2

82

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

SELECT trecord FROM `tbl` WHERE (trecord REGEXP '^ALA[0-9]')
于 2013-09-13T07:12:27.607 回答
5

就我而言(甲骨文),它是WHERE REGEXP_LIKE(column, 'regex.*'). 见这里

SQL 函数

描述


正则表达式_LIKE

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

...

正则表达式_REPLACE

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

...

正则表达式_INSTR

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

...

REGEXP_SUBSTR

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

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

于 2017-06-19T17:56:41.480 回答