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

Comment renvoyer uniquement des valeurs numériques dans SQL Server

Dans SQL Server, nous pouvons utiliser le ISNUMERIC() fonction pour renvoyer des valeurs numériques à partir d'une colonne.

Nous pouvons également exécuter une requête distincte pour renvoyer toutes les valeurs contenant des données numériques.

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

Vu qu'il s'agit d'un varchar colonne, elle contient des données textuelles. Il peut contenir des données numériques, mais il n'est pas stocké en tant que type numérique. Par conséquent, la colonne peut contenir à la fois des données textuelles et numériques. Les exemples suivants vérifient cette colonne pour les valeurs numériques.

Le ISNUMERIC() Fonction

SELECT c1
FROM t1
WHERE ISNUMERIC(c1) = 1;

Résultat :

+--------+
| c1     |
|--------|
| 0      |
| 1      |
| +1     |
| -1     |
| +1     |
| 00.00  |
| 73.45  |
| +73.45 |
| -73.45 |
| .246   |
| -.34e7 |
| 12.e-3 |
| 1.2e+4 |
+--------+

Ici, j'ai utilisé le ISNUMERIC() fonction avec la fonction Égal à (= ) pour renvoyer les valeurs qui sont numériques. La fonction renvoie 1 quand c'est numérique et 0 quand ce n'est pas le cas.

Rechercher des valeurs contenant des nombres

Nous pouvons utiliser la requête suivante pour renvoyer toutes les lignes contenant des valeurs numériques (même si elles contiennent également d'autres caractères).

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

Résultat :

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

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