从字符串中提取代码

时间:2014-10-09 10:36:43

标签: sql sql-server tsql substring

所以我在SQL中有一个像这样的字符串

Declare @Denumire varchar(2000) = '''Name''name(109)'',''name (1921)'',''name name name name name (2312)'',''name name name name name (2358)'''

我想要的是检索每个名称的每个代码。

对于这个例子,它将是

109,1921,2312,2358

我设法使用查询获取最后一个Code 2358.

Declare @Cod varchar(20)
    Declare @test varchar(3000) 
    declare @CoduriFinale varchar(2000)
    Declare @rDenumire varchar(3000) = REVERSE(@Denumire)
    SELECT @Cod = LEFT(@rDenumire,CHARINDEX ( ' ' ,@rDenumire , 0))
    SELECT @Cod = REPLACE (@Cod , '(' , '' )
    SELECT @Cod = REPLACE (@Cod , ')' , '' )        
    set @CoduriFinale = REVERSE(RTRIM(LTRIM(SUBSTRING(@Cod,2,6))))+','
    set @test = SUBSTRING(@rDenumire,CHARINDEX (',',@rDenumire, 0),LEN(@rDenumire)) 
    set @rDenumire = @test
    print @CoduriFinale
    print @test

所以我在这里所做的就是反转孔字符串(这将确保第一个字),直到' '是我的代码,我无法让它在while循环中工作为孔串做这个。

PS:我的字符串实际上是用逗号分隔的更多字符串。

5 个答案:

答案 0 :(得分:1)

CREATE   Function [fnRem](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
    WHILE PATINDEX('%[^0-9,]%', @strText) > 0
    BEGIN
        SET @strText = STUFF(@strText, PATINDEX('%[^0-9,]%', @strText), 1, '')
    END
    RETURN @strText
END






  Declare @test varchar(3000) 

    Declare @Denumire varchar(2000) = '''FABRICOM SYSTEMES D''ASSEMBLAGE (109)'',''VALEO VISION SAS (1921)'',''INERGY AUTOMOTIVE SYSTEMS GERMANY GMBH (2312)'',''TRW AUTOMOTIVE SAFETY SYSTEMS S.R.L. (2358)'''

    set @test =dbo.fnRem(@Denumire)

    select @test

<强>输出 109,1921,2312,2358

答案 1 :(得分:0)

尝试使用PATINDEX:如下所示

enter image description here

答案 2 :(得分:0)

如您所述,每个字符串都已以逗号分隔。只需使用REPLACE函数将以下所有内容替换为空白字符串(&#39;&#39;)

The string 'name', the apostrophes ('') and the brackets

这有点像多嵌套的REPLACE函数。

当你应用嵌套的REPLACE函数时,你将留下数字逗号分隔的字符串。

SELECT REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(@Denumire, '(', ''), ')', ''), 'name', ''), '''', ''), ' ', '')

答案 3 :(得分:0)

这将有效

DECLARE @alphaplace INT,@string varchar(200)='as678678df1234a1s2d3f4@@@'
SET @alphaplace = PATINDEX('%[^0-9]%', @string)
WHILE @alphaplace > 0
BEGIN
SET @string = STUFF(@string, @alphaplace, 1, ',' )

SET @alphaplace = PATINDEX('%[^0-9_,]%', @string)

END
select REPLACE(@string,',,',',') 

答案 4 :(得分:0)

enter image description here

我无法添加我的代码。所以添加为图像

OUTPUT
109,1921,2312,2358