Det kan finnas tillfällen då du behöver kontrollera en kolumn för icke-numeriska värden. Till exempel upptäcker du att en kolumn är en varchar
kolumn när det egentligen borde vara en numerisk kolumn.
Detta görs enkelt i SQL Server med ISNUMERIC()
funktion.
Exempeldata
Anta att vi skapar en tabell med en varchar
kolumn och infoga data enligt följande:
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 flesta av ovanstående värden är numeriska, även om de finns i en varchar
kolumn. Följande exempel kontrollerar denna kolumn för icke-numeriska värden.
ISNUMERIC()
Funktion
SELECT c1
FROM t1
WHERE ISNUMERIC(c1) <> 1;
Resultat:
+-----------+ | c1 | |-----------| | a | | 9afc | | e7 | | +e0 | | Ten | | 5 Dollars | +-----------+
Här använde jag ISNUMERIC()
funktionen tillsammans med Inte lika med (<> ) för att söka efter värden som inte är numeriska.
Det kan finnas en bra anledning till att en kolumn är varchar
istället för numerisk. Men om inte, bör värdena konverteras till sina numeriska motsvarigheter, och sedan bör kolumnens datatyp ändras till en numerisk typ. Detta hjälper till att upprätthålla databasens dataintegritet.
Hitta värden som inte innehåller några siffror
Vi kan använda följande fråga för att returnera alla rader som inte innehåller numeriska värden.
SELECT c1
FROM t1
WHERE c1 NOT LIKE '%[0-9]%';
Resultat:
+------+ | c1 | |------| | a | | Ten | +------+
Detta är ett annat resultat än det föregående exemplet, eftersom vi helt enkelt letar efter alla värden som inte innehåller alla numeriska data. I det föregående exemplet letade vi efter de värden som inte är numeriska.