LIKE функция для пользовательских символов - PullRequest
0 голосов
/ 24 апреля 2020

Я создаю тест для выделения данных с недопустимыми символами, где недопустимые символы определяются пользователем.

Итак, у меня есть что-то вроде

SELECT col
FROM db
WHERE col LIKE '%[^<legal chars>]%'

Обычно, когда <legal chars> содержит специальный символ, я могу использовать ESCAPE.

Однако здесь legal chars может быть любым (например, a-zA-Z0-9 и / или ^, [, \, *), поэтому независимо от того, какой специальный символ я выберу, он может быть в legal chars.

Кто-нибудь имеет представление о том, как мне следует подойти к этому вопросу?

1 Ответ

0 голосов
/ 25 апреля 2020

Если вы хотите использовать регулярные выражения, не используйте like. Используйте regexp:

where col regexp $whatever

Я бы предложил создать регулярное выражение на стороне клиента. Но вы можете сделать это в MySQL как:

where col regexp concat('[', $whatever, ']')

Однако вы должны быть осторожны со специальными символами регулярных выражений, такими как \ и -.

...