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

最明显的

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

就是不去做……


当前回答

如果你已经使用sp_helptext打开程序,那么只需复制所有文本在新的sql查询和按ctrl+h按钮使用正则表达式替换,并把^\n在查找字段替换为空白。 欲了解更多细节,请检查图像。在这里输入图像描述

其他回答

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

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

实际上,SQL命令或脚本字符串中的新行可以是CR、LF或CR+LF中的任意一个。要得到所有这些,你需要这样的东西:

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

上面/之前发布的答案被报道为取代CHAR(13)CHAR(10)回车:

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

永远不会到达代码的REPLACE(MyField, CHAR(13) + CHAR(10), 'something else')部分,并将返回不需要的结果:

'something else''something else'

而不是单一的理想结果:

'something else'

这将需要REPLACE脚本重写如下:

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

当流首先测试第一个/最左边的REPLACE语句时,如果失败,将继续测试下一个REPLACE语句。

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

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/>

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