sql >> Database teknologi >  >> RDS >> Mysql

2 måder at returnere rækker, der kun indeholder ikke-alfanumeriske tegn i MySQL

Nedenfor er der to muligheder for at finde de rækker, der kun indeholder ikke-alfanumeriske tegn i MySQL.

Ikke-alfanumeriske tegn inkluderer tegnsætningstegn såsom [email protected]#&()–[{}]:;',?/* og symboler som `~$^+=<>“ , såvel som mellemrumstegn som mellemrum eller tabulatortegn.

Eksempel på data

Vi bruger følgende data til vores eksempler:

CREATE TABLE t1 (
    c1 varchar(255) NULL
    );

INSERT INTO t1 VALUES
    ('Music'),
    ('Live Music'),
    ('Café'),
    ('Café Del Mar'),
    ('100 Cafés'),
    ('[email protected]'),
    ('1 + 1'),
    ('()'),
    ('[email protected]#&()–[{}]:;'',?/*'),
    ('`~$^+=<>“'),
    ('$1.50'),
    ('Player 456'),
    ('007'),
    (null),
    (''),
    ('é'),
    ('É'),
    ('é 123'),
    ('ø'),
    ('ø 123');
SELECT c1 FROM t1;

Resultat:

+----------------------+
| c1                   |
+----------------------+
| Music                |
| Live Music           |
| Café                 |
| Café Del Mar         |
| 100 Cafés            |
| [email protected]    |
| 1 + 1                |
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
| $1.50                |
| Player 456           |
| 007                  |
| NULL                 |
|                      |
| é                    |
| É                    |
| é 123                |
| ø                    |
| ø 123                |
+----------------------+

Mulighed 1:Sammenlign med [:alnum:]

Vi kan bruge MySQL's REGEXP operator for at sammenligne vores kolonne med et regulært udtryk.

MySQLs regulære udtryksevne inkluderer understøttelse af POSIX-tegnklasserne. Derfor kan vi bruge [:alnum:] POSIX-tegnklasse i vores regulære udtryk for at finde de rækker, der kun indeholder alfanumeriske tegn, og afvis derefter det med NOT operatør.

SELECT c1 FROM t1 
WHERE c1 NOT REGEXP '[[:alnum:]]';

Resultat:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
|                      |
+----------------------+

Hvis du har brug for at udelukke et bestemt tegn, kan du altid bruge NULLIF() fungere.

Lad os f.eks. ekskludere den tomme streng fra den sidste række:

SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[[:alnum:]]';

Resultat:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
+----------------------+

Mulighed 2:Angiv en række af tegn

En anden måde at gøre det på er at angive en række tegn i dit regulære udtryk.

Eksempel:

SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[A-Za-z0-9]';

Resultat:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
|                      |
| é                    |
| É                    |
| ø                    |
+----------------------+

Og for at fjerne den tomme streng:

SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[A-Za-z0-9]';

Resultat:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
| é                    |
| É                    |
| ø                    |
+----------------------+

I dette tilfælde dækkede mit ekskluderingsområde ikke alfanumeriske tegn som é , É og ø , og outputtet er derfor ikke en sand repræsentation af ikke-alfanumeriske tegn. Når det er sagt, giver denne metode dig i det mindste mulighed for at angive de nøjagtige tegn, du vil inkludere eller udelukke fra resultatet.

Alternativer til REGEXP

I MySQL er RLIKE og REGXP operatorer er synonymer for REGEXP_LIKE() . Derfor kan vi erstatte et hvilket som helst af de foregående eksempler med NOT RLIKE eller NOT REGEXP_LIKE() .

Eksempel på RLIKE :

SELECT c1 FROM t1 
WHERE c1 NOT RLIKE '[[:alnum:]]';

Eksempel på REGEXP_LIKE() :

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

  1. Sådan bruger du google translate URL i Oracle plsql

  2. dplyr left_join med mindre end, større end condition

  3. Intel Xeon skalerbare processorer og SQL Server 2017

  4. Kan du tilføje en hvis-erklæring i ORDER BY?