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

Buscar valores no numéricos en una columna en SQL Server

Puede haber ocasiones en las que necesite verificar una columna en busca de valores no numéricos. Por ejemplo, descubre que una columna es un varchar columna cuando en realidad debería ser una columna numérica.

Esto se hace fácilmente en SQL Server con ISNUMERIC() función.

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

La mayoría de los valores anteriores son numéricos, aunque están en un varchar columna. Los siguientes ejemplos verifican esta columna para valores no numéricos.

El ISNUMERIC() Función

SELECT c1
FROM t1
WHERE ISNUMERIC(c1) <> 1;

Resultado:

+-----------+
| c1        |
|-----------|
| a         |
| 9afc      |
| e7        |
| +e0       |
| Ten       |
| 5 Dollars |
+-----------+

Aquí, utilicé ISNUMERIC() junto con la función No es igual a (<> ) operador para verificar valores que no son numéricos.

Puede haber una buena razón para que una columna sea varchar en lugar de numérico. Pero si no, los valores deben convertirse a sus equivalentes numéricos y luego el tipo de datos de la columna debe cambiarse a un tipo numérico. Esto ayudará a mantener la integridad de los datos de la base de datos.

Encuentre valores que no contengan números

Podemos usar la siguiente consulta para devolver todas las filas que no contienen valores numéricos.

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

Resultado:

+------+
| c1   |
|------|
| a    |
| Ten  |
+------+

Este es un resultado diferente al del ejemplo anterior, porque simplemente buscamos todos los valores que no contengan cualquier dato numérico. En el ejemplo anterior, buscábamos aquellos valores que no son numéricos.