sql >> Databáze >  >> RDS >> Sqlserver

Najít nečíselné hodnoty ve sloupci na serveru SQL Server

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é.


  1. SQL Server:Je možné vkládat do dvou tabulek současně?

  2. PostgreSQL přes SSH tunel

  3. Jak funguje justify_interval() v PostgreSQL

  4. Používejte relační databáze MySQL na Fedoře 12