#sql #tsql #sql-like
Вопрос:
Я хочу использовать регулярное выражение в функции SQLs «НРАВИТСЯ», чтобы иметь возможность искать строки, содержащие определенное слово.
Например, допустим, у меня есть список имен папок (с ноутбука), и я хочу выполнить поиск по всем папкам, содержащим слово «Старый». Пример результатов, которые я хочу:
Имя папки |
---|
Старые Шаблоны |
старые Архивы |
временная — старая |
Однако, когда я использую:
WHERE folder LIKE '%Old%'
Очевидно, что я получаю следующие результаты:
Имя папки |
---|
Старые Шаблоны |
старые Архивы |
временная — старая |
Хар, старина Дженкинс |
Джерри Олд Филд |
Я просто хочу использовать регулярное выражение, которое ищет слово «Старый» на любом этапе строки, но оно ищет только 3 символа и извлекает полную строку.
Просто интересно, может ли кто — нибудь мне помочь- спасибо!
Комментарии:
1. Я не понимаю вопроса. Можете ли вы показать желаемый результат?
2. Кстати,
LIKE
это не регулярные выражения. Регулярные выражения сопоставляются сREGEX
илиRLIKE
.3. Вы спрашиваете, как сопоставлять только целые слова, а не части слов, чтобы они не совпадали
harold
?4. @Barmar Спасибо за ваш ответ. Ах, хорошо, мне сказали, что вы можете включить регулярное выражение в оператор LIKE, например, если вы открываете с помощью ‘[a-z]’. В принципе, таблица вверху-это мои желаемые результаты, но я получаю результаты из нижней таблицы. Я хочу найти слово «старый», но не хочу, чтобы оно возвращало «старый», например, в «Гарольде».
5. @Бармар Да, это то, что я пытаюсь сказать, но я не очень хорошо это сделал, ха-ха
Ответ №1:
Как правило, like
оператор имеет ограниченную функциональность, безусловно, меньшую, чем регулярное выражение. Однако то, что вам нужно, можно сделать с помощью
- Добавление пробела в начало и конец строки поиска, чтобы убедиться, что это другое слово
- Проделайте то же самое с целевой строкой, чтобы она также совпадала по краям:
where ' ' folder ' ' like '% old %'
Комментарии:
1. В конце концов, вы можете использовать классы отрицаемых символов вместо пробелов в шаблоне в качестве полизаполнения для границ слов регулярных выражений:
like '%[^a-zA-Z]old[^a-zA-Z]%'
. (или[^a-zA-Z0-9]
)2. @Barmar: вопрос помечен tsql.
3. Ой, извини, я этого не заметил. Я обычно слежу за mysql.
4. @Бармар: Это не имеет значения, но чтобы заставить тебя простить, взгляни на мой последний ответ.
5. Отлично, спасибо вам!