Ответ 1
select left(@str, patindex('%[^0-9]%', @str+'.') - 1)
У меня есть следующая строка.
Input
--------------
2030031469-NAI
Чтобы получить числовую часть, я использую следующий script
declare @str varchar(50)= '2030031469-NAI'
Select
@str
,SUBSTRING(@str, 1, NULLIF(CHARINDEX('-', @str) - 1, -1))
,Left(@str,PATINDEX('%-%',@str)-1)
чтобы получить следующий вывод
Output:
----------
2030031469
Есть ли другой простой/элегантный способ сделать то же самое?
select left(@str, patindex('%[^0-9]%', @str+'.') - 1)
Пожалуйста, проверьте это, я использовал в своем проекте для извлечения телефонных номеров
CREATE Function [dbo].[RemoveNonNumericCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin
While PatIndex('%[^0-9]%', @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex('%[^0-9]%', @Temp), 1, '')
Return @TEmp
End
Если ваша строка начинается с алфавита и заканчивается номером, например, ERT-123
вы можете использовать этот запрос:
(select substring(@str,patindex('%[0-9]%', @str),len(@str)))