Ответ 1
Я бы рекомендовал комбинацию PatIndex и Left. Тщательно сконструированный, вы можете написать запрос, который всегда работает, независимо от того, как выглядят ваши данные.
Пример:
Declare @Temp Table(Data VarChar(20))
Insert Into @Temp Values('BTA200')
Insert Into @Temp Values('BTA50')
Insert Into @Temp Values('BTA030')
Insert Into @Temp Values('BTA')
Insert Into @Temp Values('123')
Insert Into @Temp Values('X999')
Select Data, Left(Data, PatIndex('%[0-9]%', Data + '1') - 1)
From @Temp
PatIndex будет искать первый символ, который попадает в диапазон 0-9, и возвращает его положение символа, которое вы можете использовать с помощью функции LEFT для извлечения правильных данных. Обратите внимание, что PatIndex фактически использует Data + '1'. Это защищает нас от данных, в которых нет найденных чисел. Если чисел нет, PatIndex вернет 0. В этом случае функция LEFT будет ошибкой, потому что мы используем Left (Data, PatIndex - 1). Когда PatIndex вернет 0, мы получим Left (Data, -1), который возвращает ошибку.
Есть еще способы, которые могут потерпеть неудачу. Для полного объяснения я рекомендую вам прочитать:
Извлечение чисел с помощью SQL Server
В этой статье показано, как получить номера из строки. В вашем случае вы хотите получить буквенные символы. Тем не менее, процесс достаточно схожим, что вы, вероятно, можете извлечь из него что-то полезное.