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

Renvoyer des valeurs non numériques à partir d'une colonne de base de données PostgreSQL

Les exemples PostgreSQL suivants renvoient uniquement les lignes qui n'ont pas de valeur numérique dans une colonne donnée.

Exemple de données

Créons un tableau avec des exemples de données :

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
    c1 varchar(255)
);

INSERT INTO t1 (c1) VALUES 
    ('0'),
    ('1'),
    ('+1'),
    ('-1'),
    ('00.00'),
    ('73.45'),
    ('+73.45'),
    ('-73.45'),
    ('.246'),
    ('-.34e7'),
    ('12.e-3'),
    ('1.2e+4'),
    ('a'),
    ('9afc'),
    ('e7'),
    ('+e0'),
    ('Ten'),
    ('5 Dollars');

SELECT * FROM t1; 

La table est maintenant créée et contient les données suivantes :

 c1 ----------- 0 1 +1 -1 00.00 73.45 +73.45 -73.45 .246 -.34e7 12.e-3 1.2e+4 a 9afc e7 +e0 Dix 5 Dollars 

La colonne est un varchar(255) colonne, donc ce n'est pas numérique. Il peut contenir (et contient) des nombres, mais ceux-ci sont stockés sous forme de données de caractères. Il peut également contenir du texte arbitraire (ce qu'il fait).

Renvoyer les valeurs non numériques

Nous pouvons utiliser la requête suivante pour renvoyer les valeurs non numériques du tableau ci-dessus :

SELECT c1
FROM t1 
WHERE c1 !~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$'; 

Résultat :

 c1 ----------- 12.e-3 a 9afc e7 +e0 Dix 5 Dollars

Renvoyer des nombres non entiers

Si nous ne voulons renvoyer que des non entiers, la requête peut être beaucoup plus simple :

SELECT c1
FROM t1 
WHERE c1 !~ '^[0-9]+$'; 

Résultat :

 c1 ----------- +1 -1 00.00 73.45 +73.45 -73.45 .246 -.34e7 12.e-3 1.2e+4 a 9afc e7 +e0 Dix 5 Dollars

Ne contient pas de données numériques

Si nous voulons trouver des lignes qui ne contiennent pas de données numériques, nous pouvons procéder comme suit :

SELECT c1 
FROM t1 
WHERE c1 !~ '[0-9]+'; 

Résultat :

 c1 ----- une Dix

Dans PostgreSQL, !~ est un opérateur sensible à la casse utilisé pour renvoyer des valeurs qui ne correspondent pas à l'expression régulière donnée. Pour les correspondances insensibles à la casse, utilisez !~* .

Vous pouvez utiliser ~ pour renvoyer toutes les lignes qui font correspondre à l'expression régulière (et ~* pour les correspondances insensibles à la casse).