Níže jsou uvedeny dva způsoby vracení řádků, které v PostgreSQL obsahují pouze alfanumerické znaky.
Alfanumerické znaky jsou abecední znaky a číselné znaky.
Ukázková data
Pro naše příklady použijeme následující data:
SELECT c1 FROM t1;
Výsledek:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 () [email protected]#&()–[{}]:;',?/* `~$^+=<>“ $1.50 Player 456 007 null é É é 123 ø ø 123
Možnost 1:Porovnejte s [:alnum:]
Můžeme použít ~
PostgreSQL operátor pro porovnání hodnoty s regulárním výrazem.
Schopnost regulárních výrazů PostgreSQL zahrnuje podporu pro znakové třídy POSIX. Proto můžeme použít [:alnum:]
Třída znaků POSIX v našich regulárních výrazech, abyste našli řádky, které obsahují alfanumerické znaky.
SELECT c1 FROM t1
WHERE c1 ~ '^[[:alnum:]]+$';
Výsledek:
Music Café 007 é É ø
To vrátí pouze hodnoty, které se skládají pouze z alfanumerických znaků. Pokud řádek obsahuje alfanumerické i nealfanumerické znaky, nebude vrácen.
Všimněte si, že znak mezery je považován za nealfanumerický, a pokud tedy chceme zahrnout mezery, můžeme to udělat takto:
SELECT c1 FROM t1
WHERE c1 ~ '^[[:alnum:] ]+$';
Výsledek:
Music Live Music Café Café Del Mar 100 Cafés Player 456 007 é É é 123 ø ø 123
Chcete-li vrátit všechny řádky, které obsahují alfanumerické znaky (i když řádek obsahuje i jiné než alfanumerické znaky), můžeme provést toto:
SELECT c1 FROM t1
WHERE c1 ~ '[[:alnum:]]';
Výsledek:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é É é 123 ø ø 123
Možnost 2:Určete rozsah znaků
Dalším způsobem, jak to udělat, je zadat rozsah znaků v regulárním výrazu.
Příklad:
SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9]+$';
Výsledek:
Music 007
Všimnete si, že to vrátilo méně řádků než v našem prvním příkladu. Je to proto, že jsem nezahrnul é
, É
, nebo ø
znaky v mém rozsahu, a tak jsou z výstupu vyloučeny všechny řádky, které tyto znaky obsahují.
Proto se při použití této metody vyplatí být obzvláště pozorný. Bylo by snadné náhodně vyloučit znaky, které byste měli zahrnout.
Při zachování tohoto rozsahu však můžeme zahrnout mezery takto:
SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9 ]+$';
Výsledek:
Music Live Music Player 456 007
A pomocí následujícího můžeme zahrnout všechny řádky, které obsahují znaky z našeho rozsahu (i když také obsahují znaky mimo tento rozsah):
SELECT c1 FROM t1
WHERE c1 ~ '[A-Za-z0-9]';
Výsledek:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é 123 ø 123