我想替换(或删除)TSQL-string中的换行符。 什么好主意吗?

最明显的

REPLACE(@string, CHAR(13), '')

就是不去做……


当前回答

到@Cerebrus解决方案:对于字符串“+”的H2不支持。所以:

REPLACE(string, CHAR(13) || CHAR(10), 'replacementString')

其他回答

REPLACE(@string, CHAR(13) + CHAR(10), '')

如果您的列数据类型是'text',那么您将得到一个错误消息为

Msg 8116,级别16,状态1,第2行参数数据类型文本是 replace函数的参数1无效。

在这种情况下,您需要将文本转换为nvarchar,然后进行替换

SELECT REPLACE(REPLACE(cast(@str as nvarchar(max)), CHAR(13), ''), CHAR(10), '')

有时

REPLACE(myString, CHAR(13) + CHAR(10), ' ')

不能工作。在这种情况下,使用以下片段代码:

REPLACE(REPLACE(myString, CHAR(13),''), CHAR(10), ' ')

T-SQL中的换行符由CHAR(13) & CHAR(10)(回车+换行)表示。因此,可以使用要替换换行符的文本创建REPLACE语句。

REPLACE(MyField, CHAR(13) + CHAR(10), 'something else')

如果你有一个问题,你只想删除尾随字符,你可以试试这个:

WHILE EXISTS
(SELECT * FROM @ReportSet WHERE
    ASCII(right(addr_3,1)) = 10
    OR ASCII(right(addr_3,1)) = 13
    OR ASCII(right(addr_3,1)) = 32)
BEGIN
    UPDATE @ReportSet
    SET addr_3 = LEFT(addr_3,LEN(addr_3)-1)
    WHERE 
    ASCII(right(addr_3,1)) = 10
    OR ASCII(right(addr_3,1)) = 13
    OR ASCII(right(addr_3,1)) = 32
END

这解决了我在地址方面遇到的一个问题,其中一个过程创建了一个具有固定行数的字段,即使这些行是空的。为了节省SSRS报告的空间,我把它们剪掉了。