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 понимает это значение как строку.