Ответ 1
Я думаю, вы можете использовать REGEXP вместо LIKE
SELECT trecord FROM `tbl` WHERE (trecord REGEXP '^ALA[0-9]')
У меня есть простая задача, когда мне нужно искать запись, начинающуюся со строковых символов и по одной цифре после них. Я пытаюсь это сделать
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, чтобы быть конкретным.
Я думаю, вы можете использовать REGEXP вместо LIKE
SELECT trecord FROM `tbl` WHERE (trecord REGEXP '^ALA[0-9]')
В моем случае (Oracle), он WHERE REGEXP_LIKE(column, 'regex.*')
. См. здесь:
Функция SQL
Описание
REGEXP_LIKE
Эта функция выполняет поиск столбца символов для шаблона. Использовать это функции в предложении WHERE запроса, чтобы возвращать строки, соответствующие которое вы указываете.
...
REGEXP_REPLACE
Эта функция выполняет поиск шаблона в столбце символов и заменяет каждое вхождение этого шаблона заданным вами шаблоном.
...
REGEXP_INSTR
Эта функция выполняет поиск строки для данного случая регулярного выражение. Вы указываете, какое событие вы хотите найти и начальную позицию для поиска. Эта функция возвращает целое число указывая позицию в строке, где найдено совпадение.
...
REGEXP_SUBSTR
Эта функция возвращает фактическую подстроку, соответствующую регулярному который вы указываете.
(Конечно, REGEXP_LIKE соответствует только строкам , содержащим строку поиска, поэтому, если вы хотите получить полное совпадение, вам нужно использовать '^$'
для начала (^
) и завершить ($
), например: '^regex.*$'
.)
Я бы предложил
[[:alpha:]]+[[:digit:]]{1}