删除两个字符串之间的空格

时间:2015-04-19 08:47:45

标签: sql-server

我在列中有以下字符串:

<effect effrg="001003">              </effect>

我想删除两个标签之间的空格。

有没有办法做到这一点?

4 个答案:

答案 0 :(得分:2)

我认为这会对你有所帮助:

if OBJECT_ID('tempdb..#t') is not null drop table #t
create table #t (x xml)
insert into #t(x)
values('<effect effrg="001003">              </effect>')

UPDATE #t
SET x.modify('replace value of 
(/effect/text())[1] with ("")')

您还可以查看示例here

答案 1 :(得分:0)

您可以使用stuff函数删除标记之间的字符(通过替换为空字符串),并使用charindex函数两次查找第一个标记的结尾和开头第二。 UPDATE语句变为

update [table] set [colname] = stuff([colname], charindex('>',[colname],1)+1, charindex('</',[colname],1)-charindex('>',[colname],1)-1, '') 

答案 2 :(得分:0)

您可以使用简单的递归查询来解决此问题。递归查询将通过文本字段重复,直到没有剩余空格。

;WITH data 
     AS (SELECT *, 
                Row_number() 
                  OVER ( 
                    ORDER BY [text]) RN 
         FROM   table1), 
     recurs 
     AS (SELECT Replace([text], ' ', '') [text], 
                rn 
         FROM   data 
         UNION ALL 
         SELECT Replace(T1.[text], ' ', '') [text], 
                T1.rn 
         FROM   recurs T1 
                INNER JOIN data T2 
                        ON T1.rn = T2.rn 
                           AND Charindex(T1.[text], ' ') > 0) 
SELECT * 
FROM   recurs 

您可以在 SQL Fiddle 上找到一个有效的例子。

<强>被修改

为了保留括号内的空格,需要添加一个小的更改(总共添加4个字符):

;WITH data 
     AS (SELECT *, 
                Row_number() 
                  OVER ( 
                    ORDER BY [text]) RN 
         FROM   table1), 
     recurs 
     AS (SELECT Replace([text], '> ', '>') [text], 
                rn 
         FROM   data 
         UNION ALL 
         SELECT Replace(T1.[text], '> ', '>') [text], 
                T1.rn 
         FROM   recurs T1 
                INNER JOIN data T2 
                        ON T1.rn = T2.rn 
                           AND Charindex(T1.[text], ' ') > 0) 
SELECT * 
FROM   recurs 

您也可以在 SQL Fiddle 上找到此版本的工作示例。

答案 3 :(得分:0)

你可以用这个很酷的技巧来做到这一点:

Declare @s nvarchar(100) = '<effect effrg="001003">              </effect>'

Select replace(replace(replace(replace(@s, ' ', '[]'), '][', ''), '>[]<', '><'), '[]', ' ')

输出:

<effect effrg="001003"></effect>