2012-02-01 74 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)