文字列文字で始まり、その後に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エンジンを使用して実行しています。
LIKEの代わりに REGEXP を使用できると思います
SELECT trecord FROM `tbl` WHERE (trecord REGEXP '^ALA[0-9]')
私の場合(Oracle)、WHERE REGEXP_LIKE(column, 'regex.*')
です。 here を参照してください:
SQL関数
説明
REGEXP_LIKE
この関数は、パターンの文字列を検索します。クエリのWHERE句でこの関数を使用して、指定した正規表現に一致する行を返します。
...
REGEXP_REPLACE
この関数は、文字列でパターンを検索し、そのパターンの各出現を指定したパターンに置き換えます。
...
REGEXP_INSTR
この関数は、指定された正規表現パターンの出現について文字列を検索します。検索するオカレンスと検索する開始位置を指定します。この関数は、一致が見つかったストリング内の位置を示す整数を返します。
...
REGEXP_SUBSTR
この関数は、指定した正規表現パターンに一致する実際の部分文字列を返します。
(もちろん、REGEXP_LIKEは、検索文字列を含むクエリのみに一致します。したがって、完全に一致する場合は、'^$'
を使用する必要があります。開始(^
)と終了($
)が一致する場合(例:'^regex.*$'
)。