Есть ли простой способ получить, если строка является целым числом (состоит только из цифр) в MS SQL 2005?
Благодарим вас за помощь.
Есть ли простой способ получить, если строка является целым числом (состоит только из цифр) в MS SQL 2005?
Благодарим вас за помощь.
Функция ISNUMERIC возвращает ли строка числовой, но возвращает true для нецелых чисел.
Итак, вы можете использовать:
WHERE ISNUMERIC(str) AND str NOT LIKE '%.%' AND str NOT LIKE '%e%' AND str NOT LIKE '%-%'
Несмотря на то, что исходный плакат ссылался на SQL 2005, я нашел в 2008 году r2 прямая where isnumeric(string)
привела к ошибке 4145 небулевого типа. Чтобы разрешить это использование: where isnumeric(string) = 1
Вы можете использовать оператор LIKE:
WHERE str NOT LIKE '%[^0-9]%'
Смотрите 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
Немного сложно гарантировать, что значение будет соответствовать целому числу из 4 байтов.
Поскольку вы используете 2005 год - один из способов - попытаться преобразовать значение в блок try/catch. Это был бы лучший способ гарантировать, что это фактически int. Конечно, вам нужно обрабатывать случаи, когда он не находится в блоке catch в соответствии с вашими требованиями.
Еще один способ просто проверить только "цифры":
где strVal не нравится '% [^ 0-9]%'
Это пропустит -25. а также разрешить "99999999999999999999" Поэтому вам может потребоваться включить дополнительные критерии с помощью этого метода.
Использование ~ (CAST (PATINDEX ('% [^ 0-9]%', значение) как BIT)) обрабатывает все символы
Стандартная функция T-SQL ISNUMERIC (выражение) Определяет, является ли выражение допустимым числовым типом.