2013-07-30 56 views
0

如何僅在隱藏CRLF存在的字符串末尾執行替換查詢?事情是這樣的,但只在字符串的結束的字符串僅在文本字符串END上刪除CR LF的T-SQL語法

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

一些字符串有多個段落,因此CR LF類都OK,只是沒有對文本字符串的結尾內沒有任何地方。

上述代碼仍然會在整個字符串中替換CR LF。

SQL Server 2008 R2的快速

UPDATE: 我最近的參考答案的測試顯示,在SSMS的CRLFs似乎仍然在中期字符串,但複製內容到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)[email protected]) 

select len(t),t from #t 

drop table #t 

我可能做錯事僅僅指剛不知道還有什麼嘗試在這一點上。

+0

我不認爲SQL是最好的,但如果你堅持,你可能會嘗試SUBSTRING結合LEN。 –

+0

我一直在探索這個選擇。我還沒有得到任何工作。 – htm11h

回答

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)[email protected]) 
+0

與上述建議的答案相同的問題..我不相信此代碼正在工作。它似乎將CRLF保留在中間字符串中,同時從字符串末尾刪除CRLF,但是ASCII字符比較表明它們已被刪除並更改爲空格。 – htm11h

+0

當時還在發生其他事情。 STUFF只替換單個專用位置的字符。你確定他們在中間失蹤?你確定沒有其他事情發生在兩者之間嗎? –

+0

我在短時間內發佈樣本更新。 – htm11h

1

取而代之的是不是走在這條路上。你有幾個選擇,包括垃圾,襯底和左。執行LEFT如下:

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

希望這有助於。

+0

我不相信這段代碼正在工作。它似乎將CRLF保留在中間字符串中,同時從字符串末尾刪除CRLF,但是ASCII字符比較表明它們已被刪除並更改爲空格。 – htm11h

+0

如果您將結果粘貼到Excel中(由於您更新了原始文章),它可能是Excel在粘貼過程中操縱字符串。我以前見過這種情況。您可以使用「CHARINDEX」搜索剩餘CRLF的結果。 – rhoadsce