我需要删除字符串中特定字符两侧的空格

时间:2015-01-12 04:18:09

标签: sql-server sql-server-2008

我有一个非常大的字符串值,其中包含以'|'分隔的数据。

例如

Declare @string NVARCHAR(MAX)

Set @String = 'My Name|Address 1|Address 2|......'

在某些字符串值中,我有类似

的内容
@String = My Name|Address 1 | Address 2|.......

我需要删除'|'两侧的空格。如果只有一个空格,我使用

Set @string = Replace(@string,' |','|')    
Set @string = Replace(@string,'| ','|')

如果我有多个空格并且计数不能像

那样具体,该怎么办?
@String = My Name|Address 1   | Address 2|.......

4 个答案:

答案 0 :(得分:0)

合并replace将解决您的问题。试试这个

Declare @string varchar(500)

set @String = 'My Name|Address 1 | Address 2| Address 3 |.......'

select  Replace(Replace(@string,' |','|'),'| ','|')

答案 1 :(得分:0)

这是一个解决方案:

declare @s varchar(8000);
set @s = 'test                  |    test|test'

declare @tmp varchar(8000);
declare @x int;
set @x = 4096

while @x > 0
    begin
        set @tmp = replace(replace(@s, replicate(' ', @x) + '|', '|'), '|' + replicate(' ', @x), '|')
        if (@tmp = @s) set @x = @x / 2
        set @s = @tmp
    end

print @s

想法是替换空格,直到替换不再更改字符串。你可以简单地继续更换' |'和' | '与' |',但上面的代码尝试更聪明,并替换更大的块(从4096个空格开始,每步除以2)。

答案 2 :(得分:0)

此查询可能会对您有所帮助。

Declare @string

Set @String = 'My Name|Address 1  |  Address 2 |......'

--Query to remove spaces before and after a specific character

SET @String=(SELECT replace(replace(replace(@String, '|','|'),' ',''),'/t',' '))

答案 3 :(得分:0)

我在查询中写了逻辑

DECLARE @String NVARCHAR(MAX) = 'My Name|Address 1        |Address 2  |'
        -- Since '|' inside the STUFF removes the first word, we append that word
SELECT  LEFT(LTRIM(@String),1) + STUFF((SELECT '|' + CAST(Ids AS VARCHAR(500)) [text()]
         FROM 
        (
            -- Converts each value to rows and remove the spaces on start and end
            SELECT LTRIM(RTRIM(PARSENAME(REPLACE(Split.a.value('.', 'VARCHAR(500)'),'-','.'),1))) 'Ids' 
            FROM  
            (
                 SELECT CAST ('<M>' + REPLACE(@String, '|', '</M><M>') + '</M>' AS XML) AS Data       
            ) AS A 
            CROSS APPLY Data.nodes ('/M') AS Split(a)
        )TAB
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,'') + '|' COLS