Искать только по буквенно-цифровым символам столбца
У меня есть столбец таблицы типа nvarchar.
В качестве примера, скажем, одна из записей A320 - Airbus
, В этом случае содержит буквенно-цифровые символы и дефис.
Когда я ищу 320A
поиск должен найти его, игнорируя 2 пробела и дефис между двумя словами.
В настоящее время я могу добиться этого, делая это
SELECT DISTINCT Name
FROM Entity
WHERE REPLACE(REPLACE(Name, ' ', ''), '-', '') LIKE '%320A%';
Но если мне нужно добавить еще несколько escape-символов, я должен продолжать применять REPLACE
за каждый новый побег чарс.
Было бы хорошо, если бы я мог сделать что-то вроде этого:
SELECT DISTINCT Name
FROM Entity
WHERE REGEXP(Name, '^[A-Za-z0-9]+$') LIKE '%320A%';
2 ответа
Это не очень хороший обходной путь, но это обходной путь.
Это легко, если вы знаете, где будет вырезана строка поиска:
SELECT DISTINCT Name
FROM Entity
WHERE Name REGEXP '320[^a-zA-Z0-9]*A'
но если вы не знаете, вы должны добавить регулярное выражение [^a-zA-Z0-9]
между каждым персонажем. Это немного глупо, но это работает.
Попробуйте это и посмотрите, работает ли это
SELECT DISTINCT replace(replace(replace(replace(Name,' ',''),'(',''),')',''),'-','')
as Name
FROM Entity where
Name RLIKE '^[A-Za-z0-9]+$';