По-долу са два метода за връщане на редове, които съдържат само буквено-цифрови знаци в PostgreSQL.
Буквено-цифровите знаци са букви и цифри.
Примерни данни
Ще използваме следните данни за нашите примери:
SELECT c1 FROM t1;
Резултат:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 () [email protected]#&()–[{}]:;',?/* `~$^+=<>“ $1.50 Player 456 007 null é É é 123 ø ø 123
Опция 1:Сравнете с [:alnum:]
Можем да използваме ~
на PostgreSQL оператор, за да сравни стойността с регулярен израз.
Възможността за регулярни изрази на PostgreSQL включва поддръжка за POSIX символните класове. Следователно можем да използваме [:alnum:]
POSIX символен клас в нашите регулярни изрази, за да намерите редовете, които съдържат буквено-цифрови знаци.
SELECT c1 FROM t1
WHERE c1 ~ '^[[:alnum:]]+$';
Резултат:
Music Café 007 é É ø
Това връща само стойностите, които се състоят само от буквено-цифрови знаци. Ако един ред съдържа както буквено-цифрови, така и не-буквени знаци, той не се връща.
Обърнете внимание, че символът за интервал се счита за небуквен и цифров и така, ако искаме да включим интервали, можем да направим това:
SELECT c1 FROM t1
WHERE c1 ~ '^[[:alnum:] ]+$';
Резултат:
Music Live Music Café Café Del Mar 100 Cafés Player 456 007 é É é 123 ø ø 123
За да върнете всички редове, които съдържат буквено-цифрови знаци (дори редът да съдържа и не-буквени знаци), можем да направим това:
SELECT c1 FROM t1
WHERE c1 ~ '[[:alnum:]]';
Резултат:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é É é 123 ø ø 123
Опция 2:Посочете диапазон от знаци
Друг начин да го направите е да посочите диапазон от знаци в регулярния израз.
Пример:
SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9]+$';
Резултат:
Music 007
Ще забележите, че това върна по-малко редове, отколкото с първия ни пример. Това е, защото не включих é
, É
, или ø
символи в моя диапазон и така всички редове, които съдържат тези знаци, са изключени от изхода.
Ето защо си струва да бъдете особено внимателни, когато използвате този метод. Ще бъде лесно случайно да изключите знаци, които трябва да включите.
Въпреки това, в съответствие с този диапазон, можем да включим интервали като това:
SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9 ]+$';
Резултат:
Music Live Music Player 456 007
И можем да използваме следното, за да включим всички редове, които съдържат знаци от нашия диапазон (дори и те да съдържат знаци извън този диапазон):
SELECT c1 FROM t1
WHERE c1 ~ '[A-Za-z0-9]';
Резултат:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é 123 ø 123