如何使用T-SQL从字符串中获取数字部分?

16 sql sql-server

我有以下字符串.

Input
--------------
2030031469-NAI 
Run Code Online (Sandbox Code Playgroud)

要获取数字部分,我使用以下脚本

declare @str varchar(50)= '2030031469-NAI'

Select 
    @str
    ,SUBSTRING(@str, 1,  NULLIF(CHARINDEX('-', @str) - 1, -1))
        ,Left(@str,PATINDEX('%-%',@str)-1)
Run Code Online (Sandbox Code Playgroud)

获得以下输出

Output: 
----------
2030031469
Run Code Online (Sandbox Code Playgroud)

有没有其他简单/优雅的方式做同样的事情?

Mik*_*son 30

select left(@str, patindex('%[^0-9]%', @str+'.') - 1)
Run Code Online (Sandbox Code Playgroud)

  • 无法与 xxx-2030031469 一起使用。如果能更通用地处理所有情况就更好了。 (2认同)

Pej*_*Nik 9

如果您的字符串以字母开头并以数字结尾,如ERT-123

您可以使用此查询:

 (select  substring(@str,patindex('%[0-9]%', @str),len(@str)))
Run Code Online (Sandbox Code Playgroud)


Mad*_*ddy 5

请检查这个,我在我的项目中用于提取电话号码

 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
Run Code Online (Sandbox Code Playgroud)