2012-02-01 17 views
0

我想寫一個查詢來搜索我的數據庫中的字符串列表。所有字符串都是相同的格式 - 下面是一些字符串的示例查詢定位字符串的一部分的問題

LP-01-MG-01 
LN-01-MG-02 
LP-02-MG-01 
LP-02-MG-04 

每個破折號表示字符串的不同部分。我需要爲這些字符串的最後一個數字序列找到所有不同的結果。例如上面列出的4,需要返回01,02和04.我一直無法做到這一點,使用類似的命令和下劃線爲單個字符通配符或%在最後的任何事情後。任何人有任何建議?謝謝。

編輯 - 所有的項目都在數字序列之後有幾個單詞,不知道這對任何人都可以解決這個問題的方式很重要。

+1

什麼是RDBMS? – 2012-02-01 21:12:25

+0

只是一個標準的SQL數據庫在微軟的SQL管理器 - 通過連接字符串與asp.net應用程序一起使用它。我需要生成最後一個數字序列的列表來填充下拉列表。 – njj56 2012-02-01 21:18:55

回答

2

如果它們都只有最後一個連字符後面的兩個數字,則可以使用大多數RDBMS軟件包中可用的標準SQL RIGHT()LEFT()函數的組合。

SELECT RIGHT(LEFT(columnname, 11), 2) AS num FROM tbl; 

如果你不想重複,使用DISTINCT

SELECT DISTINCT RIGHT(LEFT(columnname, 11), 2) AS num FROM tbl; 

也有可能,也許更清晰,與SUBSTRING()

SELECT DISTINCT SUBSTRING(columnname, 10, 2) AS num FROM tbl; 
+0

對不起,只是做了一個編輯,他們都有後面的文字,只有我能想到的方法是在vb一邊剪下字符串,但我想知道是否有反正在我的存儲程序,因爲它會更快 – njj56 2012-02-01 21:15:34

+0

@ njj56然後看到我的變化。一個額外的函數調用''LEFT()'會做到這一點 – 2012-02-01 21:18:25

+0

謝謝你,現在試試 – njj56 2012-02-01 21:20:20

0
DECLARE @S VARCHAR(100) 
SET @S = 'LP-01-MG-01' 

SELECT RIGHT(@S, CHARINDEX('-', REVERSE(@S)) - 1)