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

Caracteres no numéricos que devuelven positivo cuando se usa ISNUMERIC() en SQL Server

El ISNUMERIC() La función en SQL Server le permite comprobar si una expresión es numérica o no.

Sin embargo, puede haber momentos en los que obtenga resultados que no esperaba. Esto podría suceder si tiene una expresión que contiene un carácter que no es un número, pero aún así es aceptado por ISNUMERIC() como siendo numérico.

Hay un montón de caracteres que ISNUMERIC() acepta como numérico lo que quizás no haya considerado como numérico. Estos incluyen caracteres como más (+ ), menos (- ) y los distintos símbolos de moneda. Además, dependiendo de su ubicación, la letra e también podría permitir que toda la expresión se interprete como numérica.

Ejemplos

Estos son algunos ejemplos de lo que quiero decir:

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

Tenga en cuenta que el e y e+ devuelven un resultado negativo cuando están solos, pero devuelven un resultado positivo cuando están rodeados de números.

Esto probablemente se deba a que, por sí solos, no representan un número, pero cuando están rodeados de números, la expresión completa podría interpretarse como notación científica (e y e+ se utilizan a menudo en notación científica).

Tipos de datos numéricos

Según la documentación de Microsoft, los tipos de datos que ISNUMERIC() reconocerá como numérico incluir lo siguiente.

Números exactos

  • grande
  • int
  • pequeño
  • pequeño
  • un poco

Precisión fija

  • decimales
  • numérico

Aproximado

  • flotar
  • real

Valores Monetarios

  • dinero
  • dinero pequeño

Además, ISNUMERIC() devuelve 1 para algunos caracteres que no son números (como se ve en el ejemplo anterior). Esto incluye caracteres como más (+ ), menos (- ), y símbolos de moneda válidos como el signo de dólar ($ ).

Además, como se ve en el ejemplo, la letra e puede afectar el resultado cuando es parte de una expresión más grande y dependiendo de su ubicación en esa expresión.