21

我有以下字符串。

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

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

4

4 回答 4

39
select left(@str, patindex('%[^0-9]%', @str+'.') - 1)
于 2012-05-04T06:11:42.690 回答
9

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

你可以使用这个查询:

 (select  substring(@str,patindex('%[0-9]%', @str),len(@str)))
于 2017-02-27T12:04:45.290 回答
6

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

 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
于 2012-05-04T06:05:07.800 回答
2

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

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]
于 2018-08-04T10:33:08.203 回答