sql >> Database >  >> RDS >> MariaDB

2 manieren om rijen te retourneren die alleen niet-alfanumerieke tekens bevatten in MariaDB

Hieronder staan ​​twee methoden voor het retourneren van rijen die alleen niet-alfanumerieke tekens bevatten in MariaDB.

Niet-alfanumerieke tekens omvatten leestekens zoals [email protected]#&()–[{}]:;',?/* en symbolen zoals `~$^+=<>“ , evenals witruimtetekens zoals de spatie of tabtekens.

Voorbeeldgegevens

We gebruiken de volgende gegevens voor onze voorbeelden:

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;

Resultaat:

+----------------------+
| 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                |
+----------------------+

Optie 1:Vergelijk met [:alnum:]

De reguliere expressiemogelijkheid van MariaDB omvat ondersteuning voor de POSIX-tekenklassen. Daarom kunnen we de [:alnum:] . gebruiken POSIX-tekenklasse in onze reguliere expressies om de rijen te vinden die alleen alfanumerieke tekens bevatten, negeer dat dan met de NOT telefoniste.

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

Resultaat:

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

Als u een specifiek teken moet uitsluiten, kunt u altijd de NULLIF() . gebruiken functie.

Laten we bijvoorbeeld de lege tekenreeks uit de laatste rij uitsluiten:

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

Resultaat:

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

Optie 2:specificeer een reeks tekens

Een andere manier om dit te doen, is door een reeks tekens in uw reguliere expressie op te geven.

Voorbeeld:

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

Resultaat:

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

En om de lege string te verwijderen:

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

Resultaat:

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

In dit geval omvatte mijn uitsluitingsbereik geen alfanumerieke tekens zoals é , É , en ø , en dus is de uitvoer geen echte weergave van niet-alfanumerieke tekens. Dat gezegd hebbende, deze methode geeft je in ieder geval de mogelijkheid om de exacte tekens op te geven die je wilt opnemen in of uitsluiten van het resultaat.


  1. CONV() – Converteer getallen tussen verschillende bases in MySQL

  2. Inleiding tot PL/SQL-verzamelmethoden in Oracle Database

  3. MySQL-roottoegang vanaf alle hosts

  4. Logische databaseback-ups met MySQL Shell