htm*_*11h 0 t-sql sql-server-2008r2-express
如何仅在存在隐藏CRLF的字符串末尾执行替换查询?像这样的东西,但只在字符串的末尾,而不是字符串中的任何位置
declare @NewLine char(2)
set @NewLine=char(13)+char(10)
update tableName
set columnName =Replace(columnName , @NewLine,'')
where ( RIGHT(columnName ,2)=@NewLine)
Run Code Online (Sandbox Code Playgroud)
一些字符串有多个段落,所以CR LF是可以的,只是不在文本字符串的末尾.
上面的代码仍然替换整个字符串中的CR LF.
SQL Server 2008 R2 Express
更新: 我最近对建议答案的测试表明,在SSMS中,CRLF似乎保留在中间字符串中,但在将内容复制到Excel并在每个字符上运行ACSII比较后,没有CRLF,它们似乎已转换为空间.我一直在测试这段代码并将结果导出到文本文件和CSV.
create table #t(t varchar(400))
insert into #t values('abc'+char(13)+char(10)+'xyz'+char(13)+char(10))
insert into #t values('rrrrr'+char(13)+char(10)+'sssss'+char(13)+char(10))
insert into #t values('Sentence1
Sentence2!
Sentence3
')
insert into #t values('rrrrr'+char(13)+char(10))
insert into #t values('Sentence111
Sentence222
')
insert into #t values('abc1234'+char(13)+char(10)+char(13)+char(10)+'xyz987'+char(13)+char(10)+char(13)+char(10)+'lmnop345'+char(13)+char(10))
declare @NewLine char(2)
set @NewLine=char(13)+char(10)
select len(t),t from #t
update #t
set t = STUFF(t, LEN(t)-1, 2,'')
where ( RIGHT(t ,2)=@NewLine)
select len(t),t from #t
drop table #t
Run Code Online (Sandbox Code Playgroud)
我可能做错了什么,不知道还有什么可以尝试.
不要使用REPLACE,请使用STUFF
declare @NewLine char(2)
set @NewLine=char(13)+char(10)
update tableName
set columnName = STUFF(columnName, LEN(columnName)-1, 2,'')
where ( RIGHT(columnName ,2)=@NewLine)
Run Code Online (Sandbox Code Playgroud)