У меня есть это значение '0310D45'
Я использую isnumeric, чтобы проверить, являются ли значения числовыми до кастинга к bigint. К сожалению, это значение проходит isnumeric проверку. Таким образом, мой запрос приводит высказывание к сбою:
Msg 8114, Level 16, State 5, Line 3
Error converting data type varchar to bigint.
Что самый простой путь состоит в том, чтобы обработать это. Я думал об использовании charindex, но я должен буду проверить все 26 букв.
Существует ли простое решение, которое я не вижу? Я действительно не хочу создавать определяемую пользователем функцию.
Спасибо
Взгляните на эту статью под названием Что не так с IsNumeric ( )? , который содержит следующую аннотацию:
Аннотация: Функция ISNUMERIC () T-SQL имеет проблему. Он может ошибочно интерпретировать нечисловые буквы и символы (такие как D, E и £) и даже табуляции (CHAR (9)) как числовые.
К сожалению, IsNumeric выглядит просто странно, и вам придется написать несколько строк T-SQL, чтобы обойти его. (Под странно я имею в виду, что ЕСЛИ оцениваемые данные вообще могут быть преобразованы в ЛЮБОЙ числовой тип, они будут преобразованы.)
Взгляните на этот вопрос SO , чтобы получить несколько альтернативных предложений для SQL Server ISNUMERIC ().
Я полагаю, Эрланд также имеет это как элемент подключения в своем списке желаний - то, что он называет is_valid_convert ().