sql >> Database teknologi >  >> RDS >> PostgreSQL

4 måder at finde rækker, der indeholder store bogstaver i PostgreSQL

Her er fire muligheder for at returnere rækker, der indeholder store bogstaver i PostgreSQL.

Eksempeldata

Antag, at vi har en tabel med følgende data:

SELECT c1 FROM t1;

Resultat:

       c1       
----------------
 CAFÉ
 Café
 café
 1café
 eCafé
 James Bond 007
 JB 007
 007
 null
 
 É
 É 123
 é
 é 123
 ø
 Ø

Vi kan bruge følgende metoder til at returnere de rækker, der indeholder store bogstaver.

Mulighed 1:Sammenlign med en POSIX-tegnklasse

Vi kan bruge ~ operatør for at udføre en overensstemmelse mellem store og små bogstaver af et regulært udtryksmønster. Mønsteret kan være så enkelt eller komplekst, som vi vil.

En simpel mulighed er at sammenligne vores kolonne med [:upper:] POSIX-tegnklasse:

SELECT c1 FROM t1
WHERE c1 ~ '[[:upper:]]';

Resultat:

       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007
 É
 É 123
 Ø

Mulighed 2:Sammenlign med LOWER() Streng

En anden mulighed er at bruge LOWER() funktion til at sammenligne den oprindelige værdi med dens tilsvarende små bogstaver:

SELECT c1 FROM t1
WHERE LOWER(c1) <> c1;

Resultat:

       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007
 É
 É 123
 Ø

Ved at bruge ikke lig med (<> ) operator (du kan alternativt bruge != i stedet for <> hvis du foretrækker det), returnerer vi kun de rækker, der er forskellige fra deres små bogstaver. Grunden til, at vi gør dette, er, at hvis en værdi er den samme som dens små bogstaver, så var den allerede små bogstaver til at begynde med (og vi ønsker ikke at returnere den).

Som standard udfører PostgreSQL et match-sensitivt match, og vi behøver derfor ikke at angive en case-sensitiv collation for at få det resultat, vi ønsker.

Valgmulighed 3:Sammenlign med de faktiske tegn

En anden mulighed er at bruge ~ operator med et regulært udtryksmønster, der eksplicit inkluderer hvert stort tegn, vi ønsker at matche:

SELECT c1 FROM t1
WHERE c1 ~ '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Resultat:

       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007

I dette tilfælde returneres færre rækker end i de foregående eksempler. Dette skyldes, at jeg ikke specificerede tegn som É og Ø , som blev returneret i disse eksempler. Vores resultat indeholder É men den række blev kun returneret, fordi den også indeholder andre store bogstaver, der gør match.

Derfor er denne mulighed mere begrænset end den forrige, men den giver dig mere kontrol over de karakterer, du vil matche.

Mulighed 4:Sammenlign med en række tegn

Vi kan alternativt angive rækken af ​​tegn, vi ønsker at matche:

SELECT c1 FROM t1
WHERE c1 ~ '[A-Z]';

Resultat:

       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007

  1. Hvordan pg_dumper man en RDS Postgres-database?

  2. STRING_AGG() Funktion i PostgreSQL

  3. SQL-kommando til at liste og vise alle databaser i MySQL &MariaDB

  4. System.Data.OracleClient kræver Oracle-klientsoftware version 8.1.7