2015-06-09 200 views
0

我有一個字符串列,我需要找到子字符串,直到找到第一個' - '。獲取子字符串,直到從右到左的特定字符SQL

示例列ELOT-IGS-2。我需要得到「2」作爲輸出。 這些列來自表,所以我無法將變量聲明爲固定字符串。

我試過LOCATESUBSTRING_INDEX但是沒有一個是在函數中構建的。

我也試過RIGHT(ID_BETSLIP,CHARINDEX('-',ID_BETSLIP)-1)但是當我有2倍,這並不工作「 - 」

有沒有人有一個想法?

+0

檢查此[LINK](http://stackoverflow.com/questions/16667251/query-to-get-only-numbers-from-a -string)或這[LINK](http://stackoverflow.com/questions/10443462/how-to-get-the-numeric-part-from-a-string-using-t-sql) – Abhi

+0

我可以聲明一個varibale來自表中的列嗎? –

回答

2
DECLARE @t varchar(20) = 'ELOT-IGS-2' 
select REVERSE(SUBSTRING(reverse(@t),0,CHARINDEX ('-',REVERSE(@t)))) 
+0

幾乎是男人!我得到了列PIK3-99701作爲輸出「10799」。有任何解決這個問題的方法嗎? –

+0

編輯你現在可以檢查@YvesVanlathem – mohan111

+0

Igor發佈了一些工作,但刪除了他的post.SUBSTRING(ID_BETSLIP,LEN(ID_BETSLIP) - CHARINDEX(' - ',REVERSE(ID_BETSLIP))+ 2,len(ID_BETSLIP))作爲測試 –

0
  1. 基礎上@ mohan111解決方案,您可以爲了得到你所需要的

    DECLARE @t VARCHAR(20)添加REVERSE = 'ELOT-IGS-2' 選擇REVERSE(SUBSTRING (反向(@t),0,CHARINDEX(' - ',REVERSE(@t))))

    • 你應該自己做這件事,一旦你有@ mohan111解決方案!爲了你自己的改進,你不能要求所有的東西:-(一旦你得到了幾乎是你所需要的解決方案,現在是時候嘗試改進它了。請檢查這個URL,並且每次你需要解析一個字符串,從這裏開始:-)嘗試檢查功能,也許你會找到解決方案。 https://msdn.microsoft.com/en-us/library/ms181984.aspx
  2. 的反向查詢,最字符串解析功能都沒有在SQL Server很好的解決方案,並且在大多數情況下,你最好做到這一點使用SQLCLR功能。

0
最簡單

select SUBSTRING(reverse(ELOT-IGS-2),0,charindex('-',reverse(ELOT-IGS-2))) 
0
select RIGHT(<your Field>, CHARINDEX('-',REVERSE(<your Field>))-1) 
相關問題