Mohou nastat situace, kdy je potřeba zkontrolovat sloupec pro nečíselné hodnoty. Například zjistíte, že sloupec je varchar
sloupec, když by to skutečně měl být číselný sloupec.
To lze snadno provést na serveru SQL pomocí ISNUMERIC()
funkce.
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 | +-----------+
Většina z výše uvedených hodnot je číselná, i když jsou v varchar
sloupec. Následující příklady kontrolují, zda tento sloupec neobsahuje nečíselné hodnoty.
Položka ISNUMERIC()
Funkce
SELECT c1
FROM t1
WHERE ISNUMERIC(c1) <> 1;
Výsledek:
+-----------+ | c1 | |-----------| | a | | 9afc | | e7 | | +e0 | | Ten | | 5 Dollars | +-----------+
Zde jsem použil ISNUMERIC()
spolu s funkcí Nerovná se (<>
) pro kontrolu hodnot, které nejsou číselné.
Může existovat dobrý důvod pro to, aby byl sloupec varchar
místo číselných. Ale pokud ne, hodnoty by měly být převedeny na jejich číselné ekvivalenty a poté by se měl datový typ sloupce změnit na číselný typ. To pomůže zachovat integritu dat databáze.
Najděte hodnoty, které neobsahují žádná čísla
Pomocí následujícího dotazu můžeme vrátit všechny řádky, které neobsahují číselné hodnoty.
SELECT c1
FROM t1
WHERE c1 NOT LIKE '%[0-9]%';
Výsledek:
+------+ | c1 | |------| | a | | Ten | +------+
Toto je jiný výsledek než v předchozím příkladu, protože jednoduše hledáme všechny hodnoty, které neobsahují jakékoli číselné údaje. V předchozím příkladu jsme hledali ty hodnoty, které nejsou číselné.