0

如何仅在存在隐藏 CRLF 的字符串末尾执行替换查询?像这样的东西,但只在字符串的末尾而不是字符串中的任何地方

declare @NewLine char(2) 
set @NewLine=char(13)+char(10)
update tableName
  set columnName  =Replace(columnName  , @NewLine,'')
where ( RIGHT(columnName ,2)=@NewLine)

有些字符串有多个段落,所以 CR LF 没问题,只是不在文本字符串的末尾。

上面的代码仍然在整个字符串中替换了 CR LF。

SQL Server 2008 R2 速成版

更新: 我最近对建议答案的测试表明,在 SSMS 中,CRLF 似乎保留在中间字符串中,但是在将内容复制到 Excel 并对每个字符运行 ACSII 比较之后,它们似乎没有被转换为空格。我一直在使用此代码进行测试,并将结果导出到文本文件和 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

我可能做错了什么,只是不确定此时还可以尝试什么。

4

2 回答 2

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)
于 2013-07-30T18:23:18.930 回答
1

REPLACE 不是解决这个问题的方法。您有几个选项,包括 STUFF、SUBSTRING 和 LEFT。LEFT 的实现如下:

declare @NewLine char(2) 
set @NewLine=char(13)+char(10)
update tableName
  set columnName  = LEFT(columnName, LEN(columnName) - 1)
where ( RIGHT(columnName ,2)=@NewLine)

希望这可以帮助。

于 2013-07-30T19:46:48.853 回答