Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Trova valori non numerici in una colonna in SQL Server

Potrebbero esserci occasioni in cui è necessario controllare una colonna per valori non numerici. Ad esempio, scopri che una colonna è un varchar colonna quando in realtà dovrebbe essere una colonna numerica.

Questo può essere fatto facilmente in SQL Server con ISNUMERIC() funzione.

Dati di esempio

Supponiamo di creare una tabella con un varchar colonna e inserire i dati come segue:

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;

Risultato:

+-----------+
| 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 maggior parte dei valori precedenti sono numerici, anche se sono in un varchar colonna. Gli esempi seguenti controllano questa colonna per valori non numerici.

Il ISNUMERIC() Funzione

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

Risultato:

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

Qui, ho usato ISNUMERIC() insieme alla funzione Diverso da (<> ) per verificare la presenza di valori non numerici.

Potrebbe esserci una buona ragione per cui una colonna deve essere varchar invece che numerico. In caso contrario, i valori devono essere convertiti nei loro equivalenti numerici e quindi il tipo di dati della colonna deve essere modificato in un tipo numerico. Ciò contribuirà a mantenere l'integrità dei dati del database.

Trova valori che non contengono numeri

Possiamo utilizzare la seguente query per restituire tutte le righe che non contengono valori numerici.

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

Risultato:

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

Questo è un risultato diverso rispetto all'esempio precedente, perché stiamo semplicemente cercando tutti i valori che non contengono qualsiasi dato numerico. Nell'esempio precedente, stavamo cercando quei valori che non sono numerici.