O
ISNUMERIC()
A função no SQL Server permite verificar se uma expressão é numérica ou não. No entanto, pode haver momentos em que você obtém resultados que não esperava. Isso pode acontecer se você tiver uma expressão que contenha um caractere que não seja um número, mas ainda seja aceito por
ISNUMERIC()
como sendo numérico. Existem vários caracteres que
ISNUMERIC()
aceita como numérico que você pode não ter pensado como numérico. Estes incluem caracteres como mais (+
), menos (-
) e os vários símbolos de moeda. Além disso, dependendo de seu posicionamento, a letra e
também pode permitir que toda a expressão seja interpretada como numérica. Exemplos
Aqui estão alguns exemplos do que quero dizer:
SELECT ISNUMERIC('+') AS [+], ISNUMERIC('-') AS [-], ISNUMERIC('$') AS [$], ISNUMERIC('1e2') AS [1e2], ISNUMERIC('1e+2') AS [1e+2], ISNUMERIC('e') AS [e], ISNUMERIC('e+') AS [e+];
Resultado:
+-----+-----+-----+-------+--------+-----+------+ | + | - | $ | 1e2 | 1e+2 | e | e+ | |-----+-----+-----+-------+--------+-----+------| | 1 | 1 | 1 | 1 | 1 | 0 | 0 | +-----+-----+-----+-------+--------+-----+------+
Observe que o
e
e e+
retornam um resultado negativo quando estão sozinhos, mas retornam um resultado positivo quando cercados por números. Isso provavelmente ocorre porque, por si só, eles não representam um número, mas quando cercados por números, toda a expressão pode ser interpretada como notação científica (
e
e e+
são frequentemente usados em notação científica). Tipos de dados numéricos
De acordo com a documentação da Microsoft, os tipos de dados que
ISNUMERIC()
reconhecerá como numérico incluem o seguinte. Números exatos
- grande
- int
- pequeno
- tinyint
- bit
Precisão fixa
- decimais
- numérico
Aproximado
- flutuar
- real
Valores monetários
- dinheiro
- dinheiro pequeno
Além disso,
ISNUMERIC()
retorna 1 para alguns caracteres que não são números (como visto no exemplo acima). Isso inclui caracteres como mais (+
), menos (-
) e símbolos de moeda válidos, como o cifrão ($
). Além disso, como visto no exemplo, a letra
e
pode afetar o resultado quando faz parte de uma expressão maior e dependendo de seu posicionamento nessa expressão.