T-SQL语法仅在文本字符串的END上删除CR LF

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)

我可能做错了什么,不知道还有什么可以尝试.

Yur*_*ter 5

不要使用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)