Може да има случаи, когато трябва да проверите колона за нечислови стойности. Например откривате, че колона е varchar колона, когато наистина трябва да е числова колона.
Това се прави лесно в SQL Server с ISNUMERIC() функция.
Примерни данни
Да предположим, че създаваме таблица с varchar колона и вмъкнете данни, както следва:
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; Резултат:
+-----------+ | 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 | +-----------+
Повечето от горните стойности са числови, въпреки че са в varchar колона. Следните примери проверяват тази колона за нечислови стойности.
ISNUMERIC() Функция
SELECT c1
FROM t1
WHERE ISNUMERIC(c1) <> 1; Резултат:
+-----------+ | c1 | |-----------| | a | | 9afc | | e7 | | +e0 | | Ten | | 5 Dollars | +-----------+
Тук използвах ISNUMERIC() функция заедно с Не е равно на (<> ) оператор за проверка за стойности, които не са числови.
Може да има основателна причина колоната да бъде varchar вместо числово. Но ако не, стойностите трябва да бъдат преобразувани в техните числови еквиваленти и след това типът данни на колоната трябва да бъде променен на числов тип. Това ще помогне за поддържането на целостта на данните на базата данни.
Намерете стойности, които не съдържат никакви числа
Можем да използваме следната заявка, за да върнем всички редове, които не съдържат числови стойности.
SELECT c1
FROM t1
WHERE c1 NOT LIKE '%[0-9]%'; Резултат:
+------+ | c1 | |------| | a | | Ten | +------+
Това е различен резултат от предишния пример, защото просто търсим всички стойности, които не съдържат всякакви цифрови данни. В предишния пример търсихме тези стойности, които не са числови.