Може да има случаи, когато трябва да проверите колона за нечислови стойности. Например откривате, че колона е 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 | +------+
Това е различен резултат от предишния пример, защото просто търсим всички стойности, които не съдържат всякакви цифрови данни. В предишния пример търсихме тези стойности, които не са числови.