web-dev-qa-db-ja.com

MySQLクエリで正規表現する方法

文字列文字で始まり、その後に1桁の数字で始まるレコードを検索する必要がある単純なタスクがあります。私がしようとしているのはこれです

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エンジンを使用して実行しています。

41
zzlalani

LIKEの代わりに REGEXP を使用できると思います

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

私の場合(Oracle)、WHERE REGEXP_LIKE(column, 'regex.*')です。 here を参照してください:

SQL関数

説明


REGEXP_LIKE

この関数は、パターンの文字列を検索します。クエリのWHERE句でこの関数を使用して、指定した正規表現に一致する行を返します。

...

REGEXP_REPLACE

この関数は、文字列でパターンを検索し、そのパターンの各出現を指定したパターンに置き換えます。

...

REGEXP_INSTR

この関数は、指定された正規表現パターンの出現について文字列を検索します。検索するオカレンスと検索する開始位置を指定します。この関数は、一致が見つかったストリング内の位置を示す整数を返します。

...

REGEXP_SUBSTR

この関数は、指定した正規表現パターンに一致する実際の部分文字列を返します。

(もちろん、REGEXP_LIKEは、検索文字列を含むクエリのみに一致します。したがって、完全に一致する場合は、'^$'を使用する必要があります。開始(^)と終了($)が一致する場合(例:'^regex.*$')。

4
Andrew