sql >> Database >  >> RDS >> Sqlserver

Vind niet-numerieke waarden in een kolom in SQL Server

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.


  1. Gebruik van SqlParameter in SQL LIKE-clausule werkt niet

  2. Het Microsoft Office-product dat weigert te sterven

  3. Records ophalen waarbij de json-kolomsleutel null is

  4. AlwaysOn-beschikbaarheidsgroepen configureren - deel 2