2013-06-13 37 views
1

我在SQL查詢2008SQL視圖SUBSTRING和CHARINDEX

SELECT [orde_reference], 
     SUBSTRING([orde_reference], 
        CHARINDEX('/', [orde_reference]) + 1, 
        LEN([orde_reference])) AS batch 
FROM Orders 

這將返回以下

orde_reference:  27777/2012/1   
batch:     2012/1 

但是我需要一批僅僅是在最後一個/字符(有總是2× '/' 在VARCHAR

orde_reference:  27777/2012/1   
batch:     1 

任何幫助,將不勝感激。

乾杯 米姆

+0

運用逆向在我的答案。 – Serge

回答

0

運用逆向兩次)

SELECT [orde_reference] 
    ,REVERSE(SUBSTRING(reverse([orde_reference]), 0, CHARINDEX('/', reverse([orde_reference])))) AS batch 
    from (values(
    ' 27777/2012/123' 
)) as O([orde_reference]) 
0

因爲總會有2 /你可以通過可選的第三個參數CHARINDEXstart_location)來告訴它開始後,第一個找。

SELECT [orde_reference], 
     SUBSTRING([orde_reference], 
        CHARINDEX('/', [orde_reference],1 + CHARINDEX('/', [orde_reference])) + 1, 
        LEN([orde_reference])) AS batch 
FROM Orders 

如果單獨將這些組件分別存儲在不同的列中,您將會更好。

+0

正如你所說,這不會與另一個「/」號碼。儘管rESERVE在每種情況下都會給出最後一個「/」分割部分。 – Serge

+0

@Serge - 雖然不相關。在這種情況下,OP正在解析具有定義良好的結構的'orde_reference'。該批次是第二項。如果結構發生變化,沒有特別的理由可以認爲批號仍然是最後的項目。 –

2

嘗試

SELECT orde_reference, 
     RIGHT(orde_reference, CHARINDEX('/', REVERSE(orde_reference)) - 1) batch 
    FROM orders 

輸出示例:

 
| ORDE_REFERENCE | BATCH | 
-------------------------- 
| 27777/2012/1 |  1 | 
| 27734/2013/11 | 11 | 

這裏是SQLFiddle演示

+0

完美謝謝peterm – ScottyM

+0

@Mim我很高興我可以幫助:)如果這是你正在尋找請,請考慮** [接受](http://meta.stackexchange.com/questions/5234/how - 接受答案 - 工作)**答案。 – peterm