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

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

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

Alfanumeriske tegn er alfabetiske tegn og numeriske tegn.

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 indeholder alfanumeriske tegn.

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[[:alnum:]]+$';

Resultat:

+-------+
| c1    |
+-------+
| Music |
| Café  |
| 007   |
| é     |
| É     |
| ø     |
+-------+

Det returnerede kun de rækker, der ikke indeholder andet end alfanumeriske tegn. Hvis en række indeholder både alfanumeriske og ikke-alfanumeriske tegn, returneres den ikke.

Mellemrumstegnet betragtes som ikke-alfanumerisk, og hvis vi vil inkludere mellemrum, kan vi gøre dette:

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[[:alnum:] ]+$';

Resultat:

+---------------+
| c1            |
+---------------+
| Music         |
| Live Music    |
| Café          |
| Café Del Mar  |
| 100 Cafés     |
| Player 456    |
| 007           |
| é             |
| É             |
| é 123         |
| ø             |
| ø 123         |
+---------------+

For at returnere alle rækker, der indeholder alfanumeriske tegn (selvom rækken også indeholder ikke-alfanumeriske tegn), kan vi gøre dette:

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

Resultat:

+-------------------+
| c1                |
+-------------------+
| Music             |
| Live Music        |
| Café              |
| Café Del Mar      |
| 100 Cafés         |
| [email protected] |
| 1 + 1             |
| $1.50             |
| Player 456        |
| 007               |
| é                 |
| É                 |
| é 123             |
| ø                 |
| ø 123             |
+-------------------+

Mulighed 2:Angiv en række af tegn

En anden måde at gøre det på er at give et regulært udtryk, der giver en række tegn. Vi kan stadig bruge REGEXP operatør til at gøre dette.

Eksempel:

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[A-Za-z0-9]+$';

Resultat:

+-------+
| c1    |
+-------+
| Music |
| 007   |
+-------+

Dette gav færre rækker end med vores første eksempel. Det er fordi jeg ikke inkluderede é , É , eller ø tegn i mit område, og derfor er alle rækker, der indeholder disse tegn, udelukket fra outputtet.

Derfor skal du være forsigtig, når du bruger denne metode, hvis du ved et uheld udelukker tegn, som du bør inkludere.

Men i overensstemmelse med dette interval kan vi inkludere mellemrum som dette:

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[A-Za-z0-9 ]+$';

Resultat:

+------------+
| c1         |
+------------+
| Music      |
| Live Music |
| Player 456 |
| 007        |
+------------+

Og vi kan bruge følgende til at inkludere alle rækker, der indeholder tegn fra vores rækkevidde (selvom de også indeholder tegn uden for dette område):

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

Resultat:

+-------------------+
| c1                |
+-------------------+
| Music             |
| Live Music        |
| Café              |
| Café Del Mar      |
| 100 Cafés         |
| [email protected] |
| 1 + 1             |
| $1.50             |
| Player 456        |
| 007               |
| é 123             |
| ø 123             |
+-------------------+

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 RLIKE eller REGEXP_LIKE() .

Eksempel på RLIKE :

SELECT c1 FROM t1 
WHERE c1 RLIKE '^[[:alnum:]]+$';

Eksempel på REGEXP_LIKE() :

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[[:alnum:]]+$');

  1. Hvordan vises funktionen, proceduren, udløser kildekoden i postgresql?

  2. Tendenser i 2020, som DBA'er bør være opmærksomme på

  3. Hvad er databaser?

  4. Præstationstestmetoder:Opdagelse af en ny måde