sql >> Databasteknik >  >> RDS >> MariaDB

2 sätt att returnera rader som endast innehåller icke-alfanumeriska tecken i MariaDB

Nedan finns två metoder för att returnera rader som endast innehåller icke-alfanumeriska tecken i MariaDB.

Icke-alfanumeriska tecken inkluderar skiljetecken som [email protected]#&()–[{}]:;',?/* och symboler som `~$^+=<>“ , såväl som blanksteg som blanksteg eller tabbtecken.

Exempeldata

Vi använder följande data för våra exempel:

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

Alternativ 1:Jämför med [:alnum:]

MariaDB:s reguljära uttryckskapacitet inkluderar stöd för POSIX-teckenklasserna. Därför kan vi använda [:alnum:] POSIX-teckenklass i våra reguljära uttryck för att hitta de rader som bara innehåller alfanumeriska tecken, förneka sedan det med NOT operatör.

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

Resultat:

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

Om du behöver utesluta ett specifikt tecken kan du alltid använda NULLIF() fungera.

Låt oss till exempel utesluta den tomma strängen från den sista raden:

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

Resultat:

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

Alternativ 2:Ange ett antal tecken

Ett annat sätt att göra det är att ange ett antal tecken i ditt reguljära uttryck.

Exempel:

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

Resultat:

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

Och för att ta bort den tomma strängen:

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

Resultat:

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

I det här fallet täckte inte mitt uteslutningsintervall alfanumeriska tecken som é , É och ø , och så utdata är inte en sann representation av icke-alfanumeriska tecken. Som sagt, åtminstone den här metoden ger dig möjlighet att ange exakt de tecken du vill inkludera eller utesluta från resultatet.


  1. Returnera noll om ingen post hittas

  2. Ett sätt att få en indexsökning för ett ledande %jokertecken

  3. Fix Åtkomst nekad för användaren 'root'@'localhost' för phpMyAdmin

  4. 12c Adaptiva planer i SQL-utvecklare