Postgres LIKE
не поддерживает регулярные выражения.
Вам необходим оператор регулярного выражения ~
.
Стандартный SQL также определяет SIMILAR TO
как странное сочетание вышеперечисленного, но лучше его не использовать.См .:
Для определения наличия символа
... означает любой символ вообще :
... WHERE col <> ''; -- any character at all?
Так что ни NULL, ни пусто.См .:
... означает любой буквенный символ (буква):
... WHERE col ~ '[[:alpha:]]'; -- any letters?
[[:alpha:]]
- это класс символов для всех буквенных символов - не только букв ASCII [A-Za-z]
, включает такие буквы, как [ÄéÒçòý]
и т. д.
Чтобы узнать, есть ли какое-либо число
... означающее любую цифру :
... WHERE col ~ '\d'; -- any digits?
\d
является сокращением класса для [[:digit:]]
.
Для нахождения какого-либо специального символа
..., означающего все, кроме цифр и букв:
... WHERE col ~ '\W'; -- anything but digits & letters?
\W
isсокращение класса для [^[:alnum:]_]
(подчеркивание исключено - руководство в настоящее время сбивает с толку).
... означает все, кроме цифр, букв и пробела:
... WHERE col ~ '[^[:alnum:]_ ]' -- ... and space
Это сокращенное обозначение класса \W
, дополнительно исключающее простое пространство.
... означающее все, кроме цифр, букв и пробелов:
... WHERE col ~ '[^[:alnum:]_\s]' -- ... and any white space
... WHERE col ~ '[^[:alnum:]_[:space:]]' -- ... the same spelled out
На этот раз исключая все пробелы, определенные классом символов Posix пробел .О "пробеле" в Unicode:
... означая любой не-ASCII символ:
Если ваш кластер БД работает с кодировкой UTF8, существует простой и очень быстрый взлом:
... WHERE octet_length(col) > length(col); -- any non-ASCII letter?
octet_length()
считает байт в строке, тогда как length()
(псевдонимы: character_length()
или char_length()
) насчитывает символов в строке.Все основные символы ASCII ([\x00-\x7F]
) кодируются 1 байтом в UTF-8, все остальные символы используют 2 - 4 байта.Любой не-ASCII-символ в строке делает выражение true
.
для дальнейшего чтения: