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.