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

Jak vrátit pouze číselné hodnoty v SQL Server

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


  1. Proč je Oracle tak pomalý, když předávám java.sql.Timestamp pro sloupec DATE?

  2. Rozlišují se v názvech sloupců a tabulek v MySQL velká a malá písmena?

  3. Průvodce pro pochopení vzorců škálování databáze

  4. Kontrola časového překrývání tabulky?