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

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

Vous trouverez ci-dessous deux méthodes pour renvoyer des lignes contenant uniquement des caractères non 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, puis inversez-la avec le NOT opérateur.

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 non alphanumériques.

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

Résultat :

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

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

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 NOT REGEXP_LIKE(c1, '[A-Za-z0-9]');

Résultat :

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

Dans ce cas, ma plage d'exclusion ne couvrait pas les caractères alphanumériques comme é , É , et ø , et la sortie n'est donc pas une représentation fidèle des caractères non alphanumériques.

Voici un exemple d'extension de la plage pour exclure ces caractères de la sortie :

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

Résultat :

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