ISNUMERIC ('07213E71') = Правда?

SQL обнаруживает, что следующая строка ISNUMERIC:

'07213E71

Я считаю, что это потому, что "E" классифицируется как математический символ.

Однако мне нужно убедиться, что только значения, которые являются целыми целыми, возвращаются как True.

Как я могу это сделать?

Ответ 1

07213E71 - плавающее число 7213 с 71 нулем

Вы можете использовать этот ISNUMERIC(myValue + '.0e0') для проверки целых чисел. Немного загадочный, но работает.

Другим тестом является двойной отрицательный myValue NOT LIKE '%[^0-9]%', который допускает только цифры от 0 до 9.

У ISNUMERIC есть другие проблемы: все возвращают 1: +, -,

Ответ 2

To nitpick: Это целое число. Это эквивалентно 7213 * 10 ^ 71.

Ответ 3

В документации говорится:

ISNUMERIC возвращает 1, когда входное выражение оценивается как действительное целое число, число с плавающей запятой, день или десятичный тип; в противном случае он возвращает 0. Возвращаемое значение 1 гарантирует, что выражение может быть преобразовано в один из этих числовых типов.

Ваш номер также является float (с экспоненциальной нотацией), поэтому единственный способ иметь ISINTEGER - определить его самостоятельно на SQL. Прочтите следующую ссылку.

http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html

Дополнительно:

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=59049

http://www.tek-tips.com/faqs.cfm?fid=6423

Ответ 4

Я столкнулся с той же проблемой. IsNumeric принимает "$, €, +, - и т.д." В качестве допустимых входов и Convert function выдает ошибки из-за этого. С помощью инструкции SQL "LIKE" исправлена ​​моя проблема. Надеюсь, это поможет другим.

SELECT UnitCode, UnitGUID, Convert(int, UnitCode) AS IntUnitCode
      FROM [NG_Data].[NG].[T_GLB_Unit]  
     WHERE ISNULL(UnitType,'') <>'Department'
       AND UnitCode NOT LIKE '%[^0-9]%'
  ORDER BY IntUnitCode

PS: не обвиняйте меня в использовании "UnitCode" как nvarchar:) Это старый проект:)

Ответ 5

Вы должны убедиться, что это вне вызова базы данных, независимо от языка, с которым вы работаете, и затем передать значение в запрос. Вероятно, SQL понимает это значение как строку.