从sql列中删除与特定条件匹配的行

时间:2016-03-02 22:53:46

标签: sql sql-server

我使用SQL Server 2008 R2作为后端。数据库中的一个表具有文本类型的字段。表中只有一个字段。 此表由应用程序填充,该应用程序将字符串列表放在单个文本字段中。由于某种原因,应用程序已开始在文本中添加一些奇怪的字符。因此它在文本的一行中显示为单个特殊字符。 例如:

abc
def
$
ghi
&
jkl

现在整个上面的字符串都存储在一个列条目中,并且有很多这样的条目。 我想知道如何编写SQL更新或替换查询以从列条目中删除特殊字符。因此,在运行查询后,行中的输出应为

abc
def
ghi
jkl

任何帮助表示赞赏。感谢

1 个答案:

答案 0 :(得分:2)

试试这样:

SELECT REPLACE(STUFF
(
    (
    SELECT 'HereTheLineBreak' + The.Parts.value('.','varchar(max)')
    FROM (SELECT CAST('<x>' + REPLACE(REPLACE(REPLACE(REPLACE(@yourString,'<','&lt;'),'>','&gt;'),'&','&amp;'),@LineBreak,'</x><x>') + '</x>' AS XML)) AS MyString(AsXml)
    CROSS APPLY MyString.AsXml.nodes('x') AS The(Parts)
    WHERE LEN(The.Parts.value('.','varchar(max)'))>1
    FOR XML PATH('')
    ),1,16,''),'HereTheLineBreak',@LineBreak)

如果您需要将结果再次连接到断行的单个字符串,请使用此选择

ID  DateString
--  ----------
 1  2016-01-01
 2  (unknown)
 3  2016-03-03