Mysql
 sql >> Base de données >  >> RDS >> Mysql

2 façons de renvoyer des lignes contenant des caractères alphanumériques dans MySQL

Vous trouverez ci-dessous deux options pour rechercher les lignes contenant des caractères alphanumériques dans MySQL.

Les caractères alphanumériques sont des caractères alphabétiques et des caractères numériques.

Exemple de données

Nous utiliserons les données suivantes pour nos exemples :

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;

Résultat :

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

Option 1 : Comparer avec [:alnum:]

Nous pouvons utiliser le REGEXP de MySQL opérateur pour comparer notre colonne à une expression régulière.

La capacité d'expression régulière de MySQL inclut la prise en charge des classes de caractères POSIX. Par conséquent, nous pouvons utiliser le [:alnum:] Classe de caractères POSIX dans nos expressions régulières pour trouver les lignes contenant des caractères alphanumériques.

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

Résultat :

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

Cela n'a renvoyé que les lignes qui ne contiennent que des caractères alphanumériques. Si une ligne contient à la fois des caractères alphanumériques et non alphanumériques, elle n'est pas renvoyée.

Le caractère espace est considéré comme non alphanumérique, et donc si nous voulons inclure des espaces, nous pouvons le faire :

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

Résultat :

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

Pour renvoyer toutes les lignes qui contiennent caractères alphanumériques (même si la ligne contient également des caractères non alphanumériques), nous pouvons faire ceci :

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

Résultat :

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

Option 2 :Spécifiez une plage de caractères

Une autre façon de le faire est de fournir une expression régulière qui fournit une plage de caractères. Nous pouvons toujours utiliser le REGEXP opérateur pour ce faire.

Exemple :

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

Résultat :

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

Cela a renvoyé moins de lignes qu'avec notre premier exemple. C'est parce que je n'ai pas inclus le é , É , ou ø caractères dans ma plage, et donc toutes les lignes contenant ces caractères sont exclues de la sortie.

Par conséquent, vous devrez être prudent lorsque vous utilisez cette méthode, au cas où vous excluriez accidentellement des caractères que vous devriez inclure.

Cependant, en respectant cette plage, nous pouvons inclure des espaces comme celui-ci :

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

Résultat :

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

Et nous pouvons utiliser ce qui suit pour inclure toutes les lignes qui contiennent caractères de notre gamme (même s'ils contiennent également des caractères hors de cette gamme) :

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

Résultat :

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

Alternatives à REGEXP

Dans MySQL, le RLIKE et REGXP les opérateurs sont synonymes de REGEXP_LIKE() . Par conséquent, nous pouvons remplacer n'importe lequel des exemples précédents par RLIKE ou REGEXP_LIKE() .

Exemple de RLIKE :

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

Exemple de REGEXP_LIKE() :

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