Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como retornar apenas valores numéricos no SQL Server


No SQL Server, podemos usar o ISNUMERIC() função para retornar valores numéricos de uma coluna.

Alternativamente, podemos executar uma consulta separada para retornar todos os valores que contêm dados numéricos.

Dados de amostra


Suponha que criamos uma tabela com um varchar coluna e insira os dados da seguinte forma:
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 |
+-----------+

Visto que este é um varchar coluna, ela contém dados de caracteres. Ele pode conter dados numéricos, mas não é armazenado como um tipo numérico. Portanto, a coluna pode conter dados textuais e numéricos. Os exemplos a seguir verificam esta coluna para valores numéricos.

O ISNUMERIC() Função

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

Aqui, usei o ISNUMERIC() função junto com o igual a (= ) para retornar os valores numéricos. A função retorna 1 quando é numérico e 0 quando não é.

Encontre valores que contenham números


Podemos usar a seguinte consulta para retornar todas as linhas que contêm valores numéricos (mesmo que também contenham outros 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 é um resultado diferente do exemplo anterior, porque estamos simplesmente procurando por todos os valores que contêm qualquer dado numérico. No exemplo anterior, estávamos procurando os valores numéricos.