如何从数字行中选择一个条目

时间:2016-04-28 17:18:39

标签: sql sql-server sql-server-2008

我需要从字符串中选择36/5之类的数字,但不会得到结果。 我只能选择36号。

代码:

DECLARE @s nvarchar(255);
SET @s = 'http://kbyte.ru/ru/Programming/Sources.aspx?id=36/5&mode=show'
-- берем переднюю  часть строки, начиная с числа
SELECT @s = SUBSTRING(@s, PATINDEX('%[0-9]%', @s), LEN(@s));
-- отсекаем хвост до числа
SELECT @s = SUBSTRING(@s, 0, PATINDEX('%[^0-9]%', @s));
-- выводим
SELECT @s;

2 个答案:

答案 0 :(得分:2)

如果您的字符串始终采用该格式,只需将 / 添加到您的第二个模式索引中。

DECLARE @s nvarchar(255);
SET @s = 'http://kbyte.ru/ru/Programming/Sources.aspx?id=36/5&mode=show'
SELECT @s = SUBSTRING(@s, PATINDEX('%[0-9]%', @s), LEN(@s));
SELECT @s = SUBSTRING(@s, 0, PATINDEX('%[^0-9/]%', @s));
SELECT @s;

答案 1 :(得分:1)

如果你总是要检索4个字符,那么另一种选择。否则你可以根据需要调整它。

 DECLARE @s nvarchar(255);
 SET @s = 'http://kbyte.ru/ru/Programming/Sources.aspx?id=36/5&mode=show'
 SELECT @s= SUBSTRING(@s,(CHARINDEX('id=',@s)+3),4)
 SELECT @s;

修改

这可以解决字符数量有限的问题......如果您的值始终介于“id =”和“& mode”之间,这将有效

 DECLARE @s nvarchar(255);
 DECLARE @int INT
 SET @s = 'http://kbyte.ru/ru/Programming/Sources.aspx?id=36/5&mode=show'
 SELECT @int = CHARINDEX('&mode',@s) - (CHARINDEX('id=',@s)+3)
 SELECT @s= SUBSTRING(@s,(CHARINDEX('id=',@s)+3),@int)
 SELECT @s;