SQL Server 2005 IsNumeric, не ловя '0310D45'

У меня есть это значение '0310D45'

Я использую isnumeric, чтобы проверить, являются ли значения числовыми до кастинга к bigint. К сожалению, это значение проходит isnumeric проверку. Таким образом, мой запрос приводит высказывание к сбою:

Msg 8114, Level 16, State 5, Line 3
Error converting data type varchar to bigint.

Что самый простой путь состоит в том, чтобы обработать это. Я думал об использовании charindex, но я должен буду проверить все 26 букв.

Существует ли простое решение, которое я не вижу? Я действительно не хочу создавать определяемую пользователем функцию.

Спасибо

6
задан codingguy3000 12 April 2010 в 20:33
поделиться

2 ответа

Взгляните на эту статью под названием Что не так с IsNumeric ( )? , который содержит следующую аннотацию:

Аннотация: Функция ISNUMERIC () T-SQL имеет проблему. Он может ошибочно интерпретировать нечисловые буквы и символы (такие как D, E и £) и даже табуляции (CHAR (9)) как числовые.

К сожалению, IsNumeric выглядит просто странно, и вам придется написать несколько строк T-SQL, чтобы обойти его. (Под странно я имею в виду, что ЕСЛИ оцениваемые данные вообще могут быть преобразованы в ЛЮБОЙ числовой тип, они будут преобразованы.)

9
ответ дан 8 December 2019 в 16:00
поделиться

Взгляните на этот вопрос SO , чтобы получить несколько альтернативных предложений для SQL Server ISNUMERIC ().

Я полагаю, Эрланд также имеет это как элемент подключения в своем списке желаний - то, что он называет is_valid_convert ().

2
ответ дан 8 December 2019 в 16:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: