#mysql #sql #regex #mysql-regexp
#mysql #sql #регулярное выражение #mysql-регулярное выражение
Вопрос:
У меня есть следующие строки:
SDZ420-1241242,
AS42-9639263,
SPF3-2352353
Я хочу «экранировать» SDZ420-часть во время поиска и выполнять поиск только с использованием последних цифр, до сих пор я пробовал, RLIKE '^[a-zA-Zd-]'
что работает, но я не понимаю, как добавить к ней следующие цифры (скажем, пользовательский ввод 1241242
). Я не могу использовать, LIKE '%$input'
поскольку это вернет строку, даже если я просто введу '242'
в качестве строки поиска.
Простыми словами, пользовательский ввод '1241242'
должен возвращать строку с 'SDZ420-1241242'
. Есть ли какой-либо другой подход, кроме создания отдельной таблицы только с числами?
Комментарии:
1. Как это связано с Java? Отредактировано, чтобы удалить этот тег.
2. Удалите префикс перед сравнением:
WHERE SUBSTRING_INDEX(column, '-', -1) = '$input'
Ответ №1:
Обратите внимание, что без перехода через некоторые сумасшедшие обручи этот поиск должен попадать в каждую строку таблицы; если у вас есть индекс для этого, он не будет использовать это (обычно используется индекс, предполагающий, что он имеет правильный вид, которым они, как правило, являются, когда вы выполняете поиск при запуске, и, как правило, только при использовании LIKE 'needle%'
и не RLIKE
. Если это проблема, сохранение цифр отдельно, а затем добавление к ним индекса, вероятно, является самым простым способом решить вашу проблему здесь.
Чтобы запросить последние несколько цифр, почему бы и нет:
SELECT * FROM foo WHERE colName LIKE ?
с помощью строки, созданной на вашем языке программирования через:
String searchTerm = "%-" digits;
Ответ №2:
Вы также можете передать число в виде строки и использовать:
where substring_index(colname, '-', -1) = ?
Это не требует изменения значения в коде приложения.