W SQL Server możemy użyć ISNUMERIC()
funkcja zwracająca wartości liczbowe z kolumny.
Alternatywnie możemy uruchomić oddzielne zapytanie, aby zwrócić wszystkie wartości zawierające dane liczbowe.
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 | +-----------+
Widząc, że jest to varchar
kolumna zawiera dane znakowe. Może zawierać dane liczbowe, ale nie jest przechowywany jako typ liczbowy. Dlatego kolumna może zawierać zarówno dane tekstowe, jak i liczbowe. Poniższe przykłady sprawdzają tę kolumnę pod kątem wartości liczbowych.
ISNUMERIC()
Funkcja
SELECT c1
FROM t1
WHERE ISNUMERIC(c1) = 1;
Wynik:
+--------+ | c1 | |--------| | 0 | | 1 | | +1 | | -1 | | +1 | | 00.00 | | 73.45 | | +73.45 | | -73.45 | | .246 | | -.34e7 | | 12.e-3 | | 1.2e+4 | +--------+
Tutaj użyłem ISNUMERIC()
funkcja wraz z równym (=
), aby zwrócić wartości liczbowe. Funkcja zwraca 1
gdy jest to liczba i 0
kiedy tak nie jest.
Znajdź wartości zawierające liczby
Możemy użyć następującego zapytania, aby zwrócić wszystkie wiersze zawierające wartości liczbowe (nawet jeśli zawierają one również inne znaki).
SELECT c1
FROM t1
WHERE c1 LIKE '%[0-9]%';
Wynik:
+-----------+ | c1 | |-----------| | 0 | | 1 | | +1 | | -1 | | +1 | | 00.00 | | 73.45 | | +73.45 | | -73.45 | | .246 | | -.34e7 | | 12.e-3 | | 1.2e+4 | | 9afc | | e7 | | +e0 | | 5 Dollars | +-----------+
To inny wynik niż w poprzednim przykładzie, ponieważ szukamy po prostu wszystkich wartości, które zawierają dowolne dane liczbowe. W poprzednim przykładzie szukaliśmy wartości liczbowych.