Как получить числовую часть из строки с помощью T-SQL?

У меня есть следующая строка.

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

Есть ли другой простой/элегантный способ сделать то же самое?

Ответ 1

select left(@str, patindex('%[^0-9]%', @str+'.') - 1)

Ответ 2

Пожалуйста, проверьте это, я использовал в своем проекте для извлечения телефонных номеров

 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

Ответ 3

Если ваша строка начинается с алфавита и заканчивается номером, например, ERT-123

вы можете использовать этот запрос:

 (select  substring(@str,patindex('%[0-9]%', @str),len(@str)))