sql >> Databáze >  >> RDS >> PostgreSQL

2 způsoby, jak vrátit řádky, které obsahují pouze alfanumerické znaky v PostgreSQL

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


  1. Prozkoumání formátů data Postgres a jejich různých funkcí

  2. Smazat duplicitní řádky v MySQL (ignoruje primární klíč)

  3. Jak nainstalovat PostgreSQL na macOS

  4. Jak mohu použít CREATE OR REPLACE?