2012-03-08 66 views
2

我在SQL Server中遇到問題。我想用Ltrim和Rtrim去除空間。SQL Server微調功能

我的查詢是這樣的

select len('test  ') 

返回6

select len(rtrim(ltrim('test  '))) 

返回6

爲什麼它不刪除的空間?

我已經檢查了ASCII值這個空間是32

任何幫助嗎?

謝謝

+1

你可以仔細檢查它們實際上是空格嗎?正如@MarekGrzenkowicz所建議的那樣,如果它們是可以解釋它的標籤...... – AdaTheDev 2012-03-08 13:39:28

回答

7

因爲此字符串中沒有空格 - test之後有兩個水平製表符\t)。

Tabs, not spaces

+0

優秀的答案。當然可以解釋6的Len()數,但是ascii代碼呢? +1 – markblandford 2012-03-08 13:40:48

+0

除非OP提供更多信息,否則無法猜測。 – 2012-03-08 13:47:56

0

實際上,空間越來越修整在這兩種情況下,這就是由SQL服務器標準化。 (LEN做微調)

+0

它沒有被修剪,它沒有被計入第一種情況。 – alykhalid 2012-03-08 13:13:48

2

沒有引起太大意義,我爲:

SELECT LEN('test ') 

應該返回4,而不是6 - LEN()將計數尾隨空格。

而如果你做的事:

SELECT DATALENGTH('test ') 

將返回6作爲DATALENGTH 確實計數尾隨空格。

+0

它返回6是因爲字符串中沒有空格 - [這些是製表符](http://stackoverflow.com/a/9618274/95)。 – 2012-03-08 13:31:40

+0

@MarekGrzenkowicz - 這將解釋它。雖然OP說他檢查過,他們是ascii 32(空間) – AdaTheDev 2012-03-08 13:36:28

+0

讓我們拭目以待OP是否回覆您的評論。對我來說,提示是第一個查詢返回6,而字符串看起來比那個長。 – 2012-03-08 13:46:27