ISNUMERIC ('07213E71') = Верно? - PullRequest
       13

ISNUMERIC ('07213E71') = Верно?

11 голосов
/ 13 мая 2011

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

07213E71 '

Я полагаю, что это потому, что «Е» классифицируется как математический символ.

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

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

Ответы [ 5 ]

20 голосов
/ 13 мая 2011

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

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

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

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

1 голос
/ 13 мая 2011

В документации написано

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

Ваш номер также является плавающим (с экспоненциальной нотацией), поэтому единственный способ получить 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

1 голос
/ 13 мая 2011

Прищемить: Это целое число. Это эквивалентно 7213 * 10 ^ 71.

0 голосов
/ 12 июня 2013

Я столкнулся с той же проблемой.IsNumeric принимает «$, €, +, - и т. Д.» В качестве допустимых входных данных, и функция Convert выдает ошибки из-за этого.Использование оператора 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 :) Это старый проект:)

0 голосов
/ 13 мая 2011

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

...