Der kan være tilfælde, hvor du skal kontrollere en kolonne for ikke-numeriske værdier. For eksempel opdager du, at en kolonne er en varchar
kolonne, når det egentlig burde være en numerisk kolonne.
Dette gøres nemt i SQL Server med ISNUMERIC()
funktion.
Eksempel på data
Antag, at vi opretter en tabel med en varchar
kolonne, og indsæt data som følger:
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;
Resultat:
+-----------+ | 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 | +-----------+
De fleste af ovenstående værdier er numeriske, selvom de er i en varchar
kolonne. Følgende eksempler kontrollerer denne kolonne for ikke-numeriske værdier.
ISNUMERIC()
Funktion
SELECT c1
FROM t1
WHERE ISNUMERIC(c1) <> 1;
Resultat:
+-----------+ | c1 | |-----------| | a | | 9afc | | e7 | | +e0 | | Ten | | 5 Dollars | +-----------+
Her brugte jeg ISNUMERIC()
funktion sammen med Ikke lig med (<> ) operatør for at tjekke for værdier, der ikke er numeriske.
Der kan være en god grund til at en kolonne er varchar
i stedet for numerisk. Men hvis ikke, skal værdierne konverteres til deres numeriske ækvivalenter, og så skal kolonnens datatype ændres til en numerisk type. Dette vil hjælpe med at bevare databasens dataintegritet.
Find værdier, der ikke indeholder tal
Vi kan bruge følgende forespørgsel til at returnere alle rækker, der ikke indeholder numeriske værdier.
SELECT c1
FROM t1
WHERE c1 NOT LIKE '%[0-9]%';
Resultat:
+------+ | c1 | |------| | a | | Ten | +------+
Dette er et andet resultat end det foregående eksempel, fordi vi simpelthen leder efter alle værdier, der ikke indeholder eventuelle numeriske data. I det foregående eksempel ledte vi efter de værdier, der ikke er numeriske.