sql >> Database teknologi >  >> RDS >> Oracle

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

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

Eksempeldata

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

SELECT c1 FROM t1;

Resultat:

CAFÉ
Café
café
1café
eCafé
James Bond 007
JB 007
007
É
É 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

Oracles REGEXP_LIKE betingelse overholder POSIX regulære udtryksstandarden og Unicode Regular Expression Guidelines. Vi kan derfor bruge [:upper:] POSIX-tegnklasse for at tjekke for store bogstaver:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:upper:]]');

Resultat:

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

Mulighed 2:Sammenlign med LOWER() Streng

Vi kan bruge LOWER() funktion til at sammenligne den oprindelige værdi med dens tilsvarende små bogstaver:

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

Resultat:

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 Oracle en søgning, der skelner mellem store og små bogstaver, og jeg behøver derfor ikke at gøre andet ved forespørgslen for at gøre den skelet mellem store og små bogstaver.

Valgmulighed 3:Sammenlign med de faktiske tegn

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

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');

Resultat:

CAFÉ
Café
eCafé
James Bond 007
JB 007

'c' specificerer forskellen mellem store og små bogstaver og accentfølsom match, selvom den fastlagte sammenstilling af betingelsen er ufølsom eller accentufølsom.

Denne gang returneres færre rækker end i de foregående eksempler. Det er fordi jeg ikke har angivet 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 skal du sikre dig, at du har alle gyldige tegn dækket, hvis du bruger denne mulighed.

Her er den igen med de to karakterer inkluderet:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[ÉØABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');

Resultat:

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

Mulighed 4:Sammenlign med en række tegn

En anden måde at gøre det på er at angive rækken af ​​store bogstaver, vi ønsker at matche:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[A-Z]', 'c');

Resultat:

CAFÉ
Café
eCafé
James Bond 007
JB 007

  1. Sådan formateres datoer i Oracle

  2. Python SQL – Sådan bruger du SQLite-, MySQL- og PostgreSQL-databaserne med Python

  3. SQLite-data til en RecyclerView

  4. Er det muligt at gennemtvinge datakontrol i MySQL ved hjælp af regulært udtryk