2017-07-03 57 views
2

這是我的Sql小提琴與模式和數據。我寫的SQL查詢工作正常,並返回數據。Sql數據右邊不需要的空間

http://sqlfiddle.com/#!6/bcf65/4

但困惑是爲什麼我有當我同時在表插入數據從未創建「空間」。 對於示例View從查詢這部分代碼:

       (SUBSTRING 
           (
           [xml] 
           ,CHARINDEX('P',[xml]) + 3 
           ,LEN([xml])-8 
           ) 

SubString功能我不得不刪除一些空間來獲得結果LEN([xml])-8

假設兩種情況:(兩者都是從SQL小提琴插入查詢)

  1. 我有數據177PKR3572427992899一行。它的總長度是'19'。因此,在上面使用的SubString函數中,其起始位置是7,即3在Data中的R之後,並且在跳過最後2位數時獲得其長度,Len()函數應該是Len(xml)-1。但是,我必須使用-8來跳過最後2位數字。對於我來說,這個空間從哪裏來?現在讓我們看看第二個。

  2. 我有一行數據0PKR101。它的總長度是'7'。因此,在SQL Fiddle中的SubString函數中,它的起始位置是4,即在Data中的R之後,並且在跳過最後2位數時獲得其長度,Len()函數應該是Len(xml)-1。但是,我必須在這裏使用-6來跳過最後2位數字。我怎樣才能使它作爲len(xml)-1工作,因爲它應該是..

+0

我很好奇:你爲什麼要調用你的列'[xml]',這樣標記問題,但我看不到任何XML相關的東西? – Shnugo

+0

@Shnugo對不起,刪除了XML標籤。那麼,這些值從xml文件中提取到列中,所以是... – ARr0w

回答

2

你忘了你的「177PKR」

的第三個參數是長度,你從PKR後開始。

所以你的長度是{total length} - 2 - ({index of P}+3),這在第一種情況下等於{total length} - 8,在第二種情況下等於{total length} - 6

這裏有一個豐富多彩的解釋: explanation

,當你想從尾的子是一般情況下:

substring(string, offset, length - offset - x) 

其中x是偏移量要從結束。

+0

2 - ({index of P} +3)= -2 -7(7是起始位置)= -9。當我用'Len()'使用負值時,它是從左邊刪除空格還是從右邊刪除空格? – ARr0w

+1

如果它的索引爲1,我犯了一個錯誤,那麼它就是P + 2的索引。 – satibel

+0

恩,可能是索引值爲0,你是我的男人是正確的。 – ARr0w