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

最明显的

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

就是不去做……


当前回答

要做到大多数人想要的,创建一个不是真正的换行符的占位符。然后你可以将这些方法结合起来:

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

这种方法只替换一次。方法:

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

如果您只是想摆脱CRLF字符,但如果您想要占位符,例如

<br/>

或者别的什么,那么第一种方法更准确一些。

其他回答

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

有时

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

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

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

在SQL Server 2017及以后版本中,使用Trim

Select Trim(char(10) + char(13) from @str)

它注重开头和结尾,而不是中间部分 \r和\n的顺序无关紧要

我用它来修剪文件名的特殊字符

Select Trim(char(10) + char(13) + ' *<>' from @fileName)

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

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

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

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