所以我在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:我的字符串实际上是用逗号分隔的更多字符串。
答案 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:如下所示
答案 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)
我无法添加我的代码。所以添加为图像
OUTPUT
109,1921,2312,2358