Как получить, если строка является числом в T-SQL

Есть ли простой способ получить, если строка является целым числом (состоит только из цифр) в MS SQL 2005?

Благодарим вас за помощь.

Ответ 1

Функция ISNUMERIC возвращает ли строка числовой, но возвращает true для нецелых чисел.

Итак, вы можете использовать:

WHERE ISNUMERIC(str) AND str NOT LIKE '%.%' AND str NOT LIKE '%e%' AND str NOT LIKE '%-%'

Ответ 2

Несмотря на то, что исходный плакат ссылался на SQL 2005, я нашел в 2008 году r2 прямая where isnumeric(string) привела к ошибке 4145 небулевого типа. Чтобы разрешить это использование: where isnumeric(string) = 1

Ответ 3

Вы можете использовать оператор LIKE:

WHERE str NOT LIKE '%[^0-9]%'

Ответ 4

Смотрите this:

CREATE Function dbo.IsInteger(@Value VarChar(18))
Returns Bit
As 
Begin

  Return IsNull(
 (Select Case When CharIndex('.', @Value) > 0 
              Then Case When Convert(int, ParseName(@Value, 1)) <> 0
                        Then 0
                        Else 1
                        End
              Else 1
              End
      Where IsNumeric(@Value + 'e0') = 1), 0)   

End

Ответ 5

Немного сложно гарантировать, что значение будет соответствовать целому числу из 4 байтов.

Поскольку вы используете 2005 год - один из способов - попытаться преобразовать значение в блок try/catch. Это был бы лучший способ гарантировать, что это фактически int. Конечно, вам нужно обрабатывать случаи, когда он не находится в блоке catch в соответствии с вашими требованиями.

Еще один способ просто проверить только "цифры":

где strVal не нравится '% [^ 0-9]%'

Это пропустит -25. а также разрешить "99999999999999999999" Поэтому вам может потребоваться включить дополнительные критерии с помощью этого метода.

Ответ 6

Использование ~ (CAST (PATINDEX ('% [^ 0-9]%', значение) как BIT)) обрабатывает все символы

Ответ 7

Стандартная функция T-SQL ISNUMERIC (выражение) Определяет, является ли выражение допустимым числовым типом.