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

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

Vous trouverez ci-dessous deux méthodes pour renvoyer des lignes contenant uniquement des caractères alphanumériques dans Oracle Database.

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 (c1) 
    WITH c AS (
        SELECT 'Music' FROM DUAL UNION ALL
        SELECT 'Live Music' FROM DUAL UNION ALL
        SELECT 'Café' FROM DUAL UNION ALL
        SELECT 'Café Del Mar' FROM DUAL UNION ALL
        SELECT '100 Cafés' FROM DUAL UNION ALL
        SELECT '[email protected]' FROM DUAL UNION ALL
        SELECT '1 + 1' FROM DUAL UNION ALL
        SELECT '()' FROM DUAL UNION ALL
        SELECT '[email protected]#&()–[{}]:;'',?/*' FROM DUAL UNION ALL
        SELECT '`~$^+=<>“' FROM DUAL UNION ALL
        SELECT '$1.50' FROM DUAL UNION ALL
        SELECT 'Player 456' FROM DUAL UNION ALL
        SELECT '007' FROM DUAL UNION ALL
        SELECT 'é' FROM DUAL UNION ALL
        SELECT 'É' FROM DUAL UNION ALL
        SELECT 'é 123' FROM DUAL UNION ALL
        SELECT 'ø' FROM DUAL UNION ALL
        SELECT 'ø 123' FROM DUAL)
SELECT * FROM c;

SELECT c1 FROM t1;

Résultat :

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

Option 1 : Comparer avec [:alnum:]

Nous pouvons utiliser le REGEXP_LIKE() d'Oracle fonction pour comparer la valeur à une expression régulière.

La capacité d'expression régulière d'Oracle 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 REGEXP_LIKE(c1, '^[[:alnum:]]+$');

Résultat :

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.

Notez que 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 REGEXP_LIKE(c1, '^[[:alnum:] ]+$');

Résultat :

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 REGEXP_LIKE(c1, '[[:alnum:]]');

Résultat :

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

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

Une autre façon de procéder consiste à spécifier une plage de caractères dans votre expression régulière.

Exemple :

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[A-Za-z0-9]+$');

Résultat :

Music
007

Vous remarquerez que 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.

Le voici à nouveau avec une plage qui inclut ces caractères :

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[A-Za-zÀ-Þß-ÿ0-9]+$');

Résultat :

Music
Café
007
é
É
ø

Nous pouvons inclure des espaces comme celui-ci :

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[A-Za-zÀ-Þß-ÿ0-9 ]+$');

Résultat :

Music
Live Music
Café
Café Del Mar
100 Cafés
Player 456
007
é
É
é 123
ø
ø 123

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 REGEXP_LIKE(c1, '[A-Za-zÀ-Þß-ÿ0-9]');

Résultat :

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

Ou si nous ne voulons pas inclure ces caractères Unicode, nous pouvons simplifier cela :

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

Résultat :

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

Cela n'exclut pas ces caractères Unicode de la sortie s'ils partagent une ligne avec des caractères alphanumériques.