sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo devolver solo valores numéricos en SQL Server

En SQL Server, podemos usar ISNUMERIC() función para devolver valores numéricos de una columna.

Alternativamente, podemos ejecutar una consulta separada para devolver todos los valores que contienen datos numéricos.

Datos de muestra

Supongamos que creamos una tabla con un varchar columna e inserte los datos de la siguiente manera:

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;

Resultado:

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

Al ver que esto es un varchar columna, contiene datos de caracteres. Puede contener datos numéricos, pero no se almacena como un tipo numérico. Por lo tanto, la columna puede contener tanto datos textuales como numéricos. Los siguientes ejemplos verifican esta columna para valores numéricos.

El ISNUMERIC() Función

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

Resultado:

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

Aquí, usé ISNUMERIC() junto con la función Igual a (= ) operador para devolver los valores que son numéricos. La función devuelve 1 cuando es numérico y 0 cuando no lo es.

Buscar valores que contengan números

Podemos usar la siguiente consulta para devolver todas las filas que contienen valores numéricos (incluso si también contienen otros caracteres).

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

Resultado:

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

Este es un resultado diferente al del ejemplo anterior, porque simplemente estamos buscando todos los valores que contienen cualquier dato numérico. En el ejemplo anterior, estábamos buscando aquellos valores que son numéricos.