Het kan voorkomen dat u een kolom moet controleren op niet-numerieke waarden. U ontdekt bijvoorbeeld dat een kolom een varchar
. is kolom terwijl het eigenlijk een numerieke kolom zou moeten zijn.
Dit is eenvoudig te doen in SQL Server met de ISNUMERIC()
functie.
Voorbeeldgegevens
Stel dat we een tabel maken met een varchar
kolom en voeg de gegevens als volgt in:
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;
Resultaat:
+-----------+ | 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 | +-----------+
De meeste van de bovenstaande waarden zijn numeriek, ook al staan ze in een varchar
kolom. De volgende voorbeelden controleren deze kolom op niet-numerieke waarden.
De ISNUMERIC()
Functie
SELECT c1
FROM t1
WHERE ISNUMERIC(c1) <> 1;
Resultaat:
+-----------+ | c1 | |-----------| | a | | 9afc | | e7 | | +e0 | | Ten | | 5 Dollars | +-----------+
Hier gebruikte ik de ISNUMERIC()
functie samen met de Niet gelijk aan (<>
) operator om te controleren op waarden die niet numeriek zijn.
Er kan een goede reden zijn dat een kolom varchar
is in plaats van numeriek. Maar als dat niet het geval is, moeten de waarden worden geconverteerd naar hun numerieke equivalenten en moet het gegevenstype van de kolom worden gewijzigd in een numeriek type. Dit helpt de gegevensintegriteit van de database te behouden.
Zoek waarden die geen cijfers bevatten
We kunnen de volgende query gebruiken om alle rijen te retourneren die geen numerieke waarden bevatten.
SELECT c1
FROM t1
WHERE c1 NOT LIKE '%[0-9]%';
Resultaat:
+------+ | c1 | |------| | a | | Ten | +------+
Dit is een ander resultaat dan het vorige voorbeeld, omdat we gewoon op zoek zijn naar alle waarden die niet bevatten eventuele numerieke gegevens. In het vorige voorbeeld waren we op zoek naar die waarden die niet numeriek zijn.