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

Rechercher des valeurs non numériques dans une colonne dans SQL Server

Il peut arriver que vous deviez vérifier une colonne pour les valeurs non numériques. Par exemple, vous découvrez qu'une colonne est un varchar alors qu'il devrait s'agir d'une colonne numérique.

Cela se fait facilement dans SQL Server avec le ISNUMERIC() fonction.

Exemple de données

Supposons que nous créons une table avec un varchar colonne et insérez les données comme suit :

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

INSERT INTO t1 (c1) VALUES 
    ('0'),
    ('1'),
    ('+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;

Résultat :

+-----------+
| c1        |
|-----------|
| 0         |
| 1         |
| +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 |
+-----------+

La plupart des valeurs ci-dessus sont numériques, même si elles sont dans un varchar colonne. Les exemples suivants vérifient cette colonne pour les valeurs non numériques.

Le ISNUMERIC() Fonction

SELECT c1
FROM t1
WHERE ISNUMERIC(c1) <> 1;

Résultat :

+-----------+
| c1        |
|-----------|
| a         |
| 9afc      |
| e7        |
| +e0       |
| Ten       |
| 5 Dollars |
+-----------+

Ici, j'ai utilisé le ISNUMERIC() fonction avec la fonction Différent de (<> ) pour vérifier les valeurs qui ne sont pas numériques.

Il peut y avoir une bonne raison pour qu'une colonne soit varchar au lieu de numérique. Mais si ce n'est pas le cas, les valeurs doivent être converties en leurs équivalents numériques, puis le type de données de la colonne doit être remplacé par un type numérique. Cela aidera à maintenir l'intégrité des données de la base de données.

Rechercher des valeurs qui ne contiennent aucun nombre

Nous pouvons utiliser la requête suivante pour renvoyer toutes les lignes qui ne contiennent pas de valeurs numériques.

SELECT c1
FROM t1 
WHERE c1 NOT LIKE '%[0-9]%';

Résultat :

+------+
| c1   |
|------|
| a    |
| Ten  |
+------+

Il s'agit d'un résultat différent de l'exemple précédent, car nous recherchons simplement toutes les valeurs qui ne contiennent toutes les données numériques. Dans l'exemple précédent, nous recherchions les valeurs qui ne sont pas numériques.