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

如何使用T-SQL从字符串中获取数字部分?,sql,sql-server,Sql,Sql Server,我有下面的字符串 Input -------------- 2030031469-NAI 为了得到数字部分,我使用以下脚本 declare @str varchar(50)= '2030031469-NAI' Select @str ,SUBSTRING(@str, 1, NULLIF(CHARINDEX('-', @str) - 1, -1)) ,Left(@str,PATINDEX('%-%',@str)-1) 要获得以下输出 Output: -

我有下面的字符串

Input
--------------
2030031469-NAI 
为了得到数字部分,我使用以下脚本

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

Select 
    @str
    ,SUBSTRING(@str, 1,  NULLIF(CHARINDEX('-', @str) - 1, -1))
        ,Left(@str,PATINDEX('%-%',@str)-1)
要获得以下输出

Output: 
----------
2030031469

有没有其他简单/优雅的方法可以做到这一点?

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

 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)))

从未格式化字符串中提取数字的步骤

DECLARE @Text NVARCHAR(100)= 'extract only 23124R integer @#%%'
SELECT SUBSTRING(@Text, PATINDEX('%[0-9]%',@Text), PATINDEX('%[^0-9]%',SUBSTRING(@Text, PATINDEX('%[0-9]%',@Text), LEN(@Text)))-1) [ONLY_INT]

我在这篇博客中发现这是一个非常好的方法。这在空字符串上失败。我认为最好先检查变量,然后对它执行任何类型的操作。至少我是这么做的。没有和xxx-2030031469一起工作。如果它能更通用地处理所有情况,那就更好了。
DECLARE @Text NVARCHAR(100)= 'extract only 23124R integer @#%%'
SELECT SUBSTRING(@Text, PATINDEX('%[0-9]%',@Text), PATINDEX('%[^0-9]%',SUBSTRING(@Text, PATINDEX('%[0-9]%',@Text), LEN(@Text)))-1) [ONLY_INT]