V SQL Server můžeme použít ISNUMERIC()
funkce pro vrácení číselných hodnot ze sloupce.
Alternativně můžeme spustit samostatný dotaz a vrátit všechny hodnoty, které obsahují číselná data.
Ukázková data
Předpokládejme, že vytvoříme tabulku s varchar
sloupec a vložte data následovně:
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;
Výsledek:
+-----------+ | 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 | +-----------+
Vzhledem k tomu, že se jedná o varchar
obsahuje znaková data. Může obsahovat číselná data, ale není uložena jako číselný typ. Sloupec tedy může obsahovat textová i číselná data. Následující příklady kontrolují, zda tento sloupec obsahuje číselné hodnoty.
Položka ISNUMERIC()
Funkce
SELECT c1
FROM t1
WHERE ISNUMERIC(c1) = 1;
Výsledek:
+--------+ | c1 | |--------| | 0 | | 1 | | +1 | | -1 | | +1 | | 00.00 | | 73.45 | | +73.45 | | -73.45 | | .246 | | -.34e7 | | 12.e-3 | | 1.2e+4 | +--------+
Zde jsem použil ISNUMERIC()
spolu s funkcí Rovná se (=
) vrátíte hodnoty, které jsou číselné. Funkce vrátí 1
když je číselný a 0
když není.
Najít hodnoty, které obsahují čísla
Pomocí následujícího dotazu můžeme vrátit všechny řádky, které obsahují číselné hodnoty (i když obsahují i jiné znaky).
SELECT c1
FROM t1
WHERE c1 LIKE '%[0-9]%';
Výsledek:
+-----------+ | 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 | +-----------+
Toto je jiný výsledek než v předchozím příkladu, protože jednoduše hledáme všechny hodnoty, které obsahují jakékoli číselné údaje. V předchozím příkladu jsme hledali ty hodnoty, které jsou číselné.