sql >> Database teknologi >  >> RDS >> MariaDB

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

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

Eksempel på data

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 REGEXP operatør for at udføre en match af et regulært udtryksmønster.

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

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

Resultat:

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

RLIKE er et synonym for REGEXP , så vi kan erstatte REGEXP med RLIKE for at få det samme resultat:

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

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 BINARY LOWER(c1) <> BINARY 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 MariaDB en søgning uden store og små bogstaver, så jeg bruger BINÆR operatør for at få en søgning, der skelner mellem store og små bogstaver.

Dette kan også gøres sådan her:

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

Mulighed 3:Sammenlign med de faktiske tegn

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

SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Resultat:

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

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 det foregående eksempel. 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.

Mulighed 4:Sammenlign med en række tegn

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

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

Resultat:

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

  1. Installation af Oracle 11g Release 2 Enterprise Edition på Windows 7 32-bit

  2. Fuldtekstsøgning i Postgres eller CouchDB?

  3. SQL Server 2016:Altid krypteret

  4. Django modellerer en fremmednøgle til mange borde