Как получить, если строка является числом в T-SQL - PullRequest
11 голосов
/ 21 января 2010

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

Спасибо за помощь.

Ответы [ 7 ]

16 голосов
/ 31 июля 2013

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

15 голосов
/ 21 января 2010

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

Чтобы вы могли использовать:

WHERE ISNUMERIC(str) AND str NOT LIKE '%.%' AND str NOT LIKE '%e%' AND str NOT LIKE '%-%'
5 голосов
/ 21 января 2010

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

WHERE str NOT LIKE '%[^0-9]%'
2 голосов
/ 21 января 2010

См. это :

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
1 голос
/ 21 января 2010

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

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

Другой способ проверить только "цифры" заключается в следующем:

где strVal не похож на '% [^ 0-9]%'

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

0 голосов
/ 10 апреля 2017

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

0 голосов
/ 21 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...