2013-07-02 41 views
4

我有一個表需要清理其中一個字段。基本表結構如下:在sql server表中搜索ASCII值

create table testComments(id int, comments text) 

在註釋列部分行不得不許多「回車」(CHAR(13))和「換行」(CHAR(10))。如果每行有多個分組,我需要能夠對其進行修改。我至今基本select語句是如下:

select count(id) 
    from testComments 
    where comments like('%' + char(13) + char(10) + char(13) + char(10) + '%') 

這個查詢,如果該評論被列爲找到結果

"This is a entry in the testComments crlf 
crlf 
In the comments field that works" 

雖然查詢將找不到結果如下:

"This is an entry in the testComments crlf 
crlf 
crlf 
That will not work" 

該查詢只返回上述數據的1個條目的計數。任何想法如何改變查詢返回2的計數?

+8

[*'ntext','text'和'image'數據類型將在未來版本的SQL Server中刪除。避免在新的開發工作中使用這些數據類型,並計劃修改當前正在使用它們的應用程序。使用'nvarchar(max)','varchar(max)'和'varbinary(max)'代替。*](http://msdn.microsoft.com/en-us/library/ms187993.aspx) –

+0

什麼是你的意思是返回2的計數?你只需要邏輯來拿起後面的例子,對吧? –

+0

是山羊CO我只需要邏輯來拿起後面的例子。 – Chris

回答

3

使用您給我們的代碼,您的查詢應該正常工作。所以細節看起來不同,我懷疑GolezTrol的評論是正確的 - 一些CRLF對實際上只是單獨的CR或LF字符。

試試這個:

select count(id) 
    from #testComments 
    where comments like('%' + char(13) + char(10) + char(13) + char(10) + '%') 
    or comments like('%' + char(10) + char(10) + '%') 
    or comments like('%' + char(13) + char(13) + '%') 
+0

這是正確的,我知道這是簡單的。我無法弄清楚。謝謝。 – Chris

+0

@克里斯:不客氣。 :D –

0

查詢將只返回1個條目上述數據計數。任何想法如何改變查詢返回2的計數?

我認爲你誤解了一些基本的東西。 COUNT-Function返回所有返回行的計數。在你的例子中,它仍然返回一個行。

所以不管你有這樣的:

"This is an entry in the testComments crlf 
crlf 
That will not work" 

或者這樣:

"This is an entry in the testComments crlf 
crlf 
crlf 
crlf 
crlf 
That will not work" 

COUNT仍然會返回1!(如果您有這串一個記錄)

編輯:如果你硬是要算字符的每一行,在這裏你去:

SELECT LEN(REPLACE(myColumn, 'yourCharacter', '')) FROM ... 
0

嘗試使用虛擬表。在用空字符串替換正在查找的字符後,我添加了註釋字段和註釋字段的長度差異。

SELECT SUM(DIF) FROM (
select  
(
    LEN(comments) 
      - LEN(REPLACE( REPLACE (comments, char(13), ''),char(10),'')) 
) 
AS DIF  
from #testComments 
) as VT; 
+0

我很肯定他不想簡單地用CR或LF來檢測字符串,而是用一對相鄰的CRLF來檢測字符串,兩者之間沒有任何關係。 (即他正在尋找空行) –

+0

然後他只需將char(13)/ char(10)與感興趣的字符交換即可。至少,這應該足以開始。 – rgrano

+0

這不是他問題的原因嗎?沒有回答,你有什麼幫助? –