Może się zdarzyć, że trzeba będzie sprawdzić kolumnę pod kątem wartości nieliczbowych. Na przykład odkrywasz, że kolumna jest varchar
kolumna, kiedy naprawdę powinna być kolumną liczbową.
Można to łatwo zrobić w SQL Server za pomocą ISNUMERIC()
funkcja.
Przykładowe dane
Załóżmy, że tworzymy tabelę z varchar
kolumnę i wstawiaj dane w następujący sposób:
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;
Wynik:
+-----------+ | 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 | +-----------+
Większość powyższych wartości to wartości numeryczne, mimo że są one w varchar
kolumna. Poniższe przykłady sprawdzają tę kolumnę pod kątem wartości nienumerycznych.
ISNUMERIC()
Funkcja
SELECT c1
FROM t1
WHERE ISNUMERIC(c1) <> 1;
Wynik:
+-----------+ | c1 | |-----------| | a | | 9afc | | e7 | | +e0 | | Ten | | 5 Dollars | +-----------+
Tutaj użyłem ISNUMERIC()
funkcja wraz z funkcją Nie równa się (<>
), aby sprawdzić wartości, które nie są numeryczne.
Może istnieć dobry powód, aby kolumna była varchar
zamiast liczbowego. Ale jeśli nie, wartości powinny zostać przekonwertowane na ich odpowiedniki liczbowe, a następnie typ danych kolumny powinien zostać zmieniony na typ liczbowy. Pomoże to zachować integralność danych w bazie danych.
Znajdź wartości, które nie zawierają żadnych liczb
Możemy użyć następującego zapytania, aby zwrócić wszystkie wiersze, które nie zawierają wartości liczbowych.
SELECT c1
FROM t1
WHERE c1 NOT LIKE '%[0-9]%';
Wynik:
+------+ | c1 | |------| | a | | Ten | +------+
To inny wynik niż w poprzednim przykładzie, ponieważ szukamy po prostu wszystkich wartości, które nie zawierają dowolne dane liczbowe. W poprzednim przykładzie szukaliśmy wartości, które nie są liczbowe.