我想替换(或删除)TSQL-string中的换行符。 什么好主意吗?
最明显的
REPLACE(@string, CHAR(13), '')
就是不去做……
我想替换(或删除)TSQL-string中的换行符。 什么好主意吗?
最明显的
REPLACE(@string, CHAR(13), '')
就是不去做……
当前回答
实际上,SQL命令或脚本字符串中的新行可以是CR、LF或CR+LF中的任意一个。要得到所有这些,你需要这样的东西:
SELECT REPLACE(REPLACE(@str, CHAR(13), ''), CHAR(10), '')
其他回答
如果你有一个问题,你只想删除尾随字符,你可以试试这个:
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报告的空间,我把它们剪掉了。
如果您的列数据类型是'text',那么您将得到一个错误消息为
Msg 8116,级别16,状态1,第2行参数数据类型文本是 replace函数的参数1无效。
在这种情况下,您需要将文本转换为nvarchar,然后进行替换
SELECT REPLACE(REPLACE(cast(@str as nvarchar(max)), CHAR(13), ''), CHAR(10), '')
实际上,SQL命令或脚本字符串中的新行可以是CR、LF或CR+LF中的任意一个。要得到所有这些,你需要这样的东西:
SELECT REPLACE(REPLACE(@str, CHAR(13), ''), CHAR(10), '')
T-SQL中的换行符由CHAR(13) & CHAR(10)(回车+换行)表示。因此,可以使用要替换换行符的文本创建REPLACE语句。
REPLACE(MyField, CHAR(13) + CHAR(10), 'something else')
上面/之前发布的答案被报道为取代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语句。