Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come restituire solo valori numerici in SQL Server

In SQL Server possiamo usare ISNUMERIC() funzione per restituire valori numerici da una colonna.

In alternativa, possiamo eseguire una query separata per restituire tutti i valori che contengono dati numerici.

Dati di esempio

Supponiamo di creare una tabella con un varchar colonna e inserire i dati come segue:

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;

Risultato:

+-----------+
| 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 |
+-----------+

Visto che questo è un varchar colonna, contiene dati sui caratteri. Può contenere dati numerici, ma non è memorizzato come tipo numerico. Pertanto, la colonna può contenere sia dati testuali che numerici. Gli esempi seguenti controllano questa colonna per i valori numerici.

Il ISNUMERIC() Funzione

SELECT c1
FROM t1
WHERE ISNUMERIC(c1) = 1;

Risultato:

+--------+
| c1     |
|--------|
| 0      |
| 1      |
| +1     |
| -1     |
| +1     |
| 00.00  |
| 73.45  |
| +73.45 |
| -73.45 |
| .246   |
| -.34e7 |
| 12.e-3 |
| 1.2e+4 |
+--------+

Qui ho usato ISNUMERIC() insieme alla funzione Uguale a (= ) per restituire i valori numerici. La funzione restituisce 1 quando è numerico e 0 quando non lo è.

Trova valori che contengono numeri

Possiamo utilizzare la seguente query per restituire tutte le righe che contengono valori numerici (anche se contengono anche altri caratteri).

SELECT c1
FROM t1 
WHERE c1 LIKE '%[0-9]%';

Risultato:

+-----------+
| 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 |
+-----------+

Questo è un risultato diverso rispetto all'esempio precedente, perché stiamo semplicemente cercando tutti i valori che contengono qualsiasi dato numerico. Nell'esempio precedente, stavamo cercando quei valori numerici.