我想替换(或删除)TSQL-string中的换行符。 什么好主意吗?
最明显的
REPLACE(@string, CHAR(13), '')
就是不去做……
我想替换(或删除)TSQL-string中的换行符。 什么好主意吗?
最明显的
REPLACE(@string, CHAR(13), '')
就是不去做……
当前回答
在SQL Server 2017及以后版本中,使用Trim
Select Trim(char(10) + char(13) from @str)
它注重开头和结尾,而不是中间部分 \r和\n的顺序无关紧要
我用它来修剪文件名的特殊字符
Select Trim(char(10) + char(13) + ' *<>' from @fileName)
其他回答
在SQL Server 2017及以后版本中,使用Trim
Select Trim(char(10) + char(13) from @str)
它注重开头和结尾,而不是中间部分 \r和\n的顺序无关紧要
我用它来修剪文件名的特殊字符
Select Trim(char(10) + char(13) + ' *<>' from @fileName)
如果您的列数据类型是'text',那么您将得到一个错误消息为
Msg 8116,级别16,状态1,第2行参数数据类型文本是 replace函数的参数1无效。
在这种情况下,您需要将文本转换为nvarchar,然后进行替换
SELECT REPLACE(REPLACE(cast(@str as nvarchar(max)), CHAR(13), ''), CHAR(10), '')
我想清除一个列的内容,以生成一个csv文件,所以想摆脱逗号(,)在varchar以及换行符和回车。
我还想最终使用生成的csv来创建另一个脚本(将行插入到另一个db中),所以也需要在varchar中更改为“因此最终得到了这个…
REPLACE(REPLACE(REPLACE(REPLACE(ErrorMessage, CHAR(13), ''), CHAR(10), ''),',',''),'''','''''')
也许还有其他更好的方法,但它已经完成了任务。
如果你已经使用sp_helptext打开程序,那么只需复制所有文本在新的sql查询和按ctrl+h按钮使用正则表达式替换,并把^\n在查找字段替换为空白。 欲了解更多细节,请检查图像。在这里输入图像描述
如果你有一个问题,你只想删除尾随字符,你可以试试这个:
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报告的空间,我把它们剪掉了。