如何从SQL中的URL字符串中提取ID号?

时间:2014-02-11 15:33:11

标签: sql sql-server

我正在尝试从URL中提取ID并遇到一些问题。 URL的内容如下所示:

  

http://www.website.com/news/view.aspx?id=95

     

http://www.website.com/news/view.aspx?id=20&ReturnURL=%2fnews%2fview.aspx%3fid%3d20

我正在尝试返回“?id =”之后的数字,而不是数字之后的任何内容。然后我将它引用到另一个表的INT转换。有关如何正确执行此操作的任何建议吗?

4 个答案:

答案 0 :(得分:1)

使用charindex查找?idstuff的位置,以移除?id之前的字符。然后,您使用left将字符返回到下一个&

declare @T table
(
  URL varchar(100)
);

insert into @T values
('http://www.website.com/news/view.aspx?id=95'),
('http://www.website.com/news/view.aspx?id=20&ReturnURL=%2fnews%2fview.aspx%3fid%3d20');


select left(T2.URL, charindex('&', T2.URL) - 1) as ID
from @T as T
  cross apply (select stuff(T.URL, 1, charindex('?id', T.URL) + 3, '')+'&') as T2(URL);

答案 1 :(得分:0)

我不清楚你在问什么。当您在asp.net应用程序中时,您是否在询问如何从URL获取id的值?然后在你背后的代码中

在c#

string id = Request.QueryString["id"]; // returns null if id not found

Reference

From this SO question尝试使用整数:

int id;
if (!int.TryParse(Request.QueryString["id"], out id))
{
  // error case
}

答案 2 :(得分:0)

您可以在SQL函数中执行此操作,如下所示:

declare @URL varchar(100)

--set @URL = 'http://www.website.com/news/view.aspx?id=95'
set @URL = 'http://www.website.com/news/view.aspx?id=20&ReturnURL=%2fnews%2fview.aspx%3fid%3d20'

Set @URL = CASE charindex('&',@URL) 
    WHEN 0 then @URL else substring(@url,1,charindex('&',@URL)-1) end

select @URL,SUBSTRING(@URL,CHARINDEX('?id=',@URL)+4,99)

两个例子都在那里,评论一个看结果

答案 3 :(得分:0)

这里是您要在URL中查找任何参数值的值时可以使用的选项,它还支持解析包含URL的文本值

DECLARE @Param varchar(50) = 'event'
DECLARE @Data varchar(8000) = 'User Logged into  https://my.website.org/default.aspx?id=3066&event=49de&event=true from ip'

DECLARE @ParamIndex int = (select PatIndex('%'+@param+'=%', @Data)+LEN(@param)+1)
-- @ParamValueSubstring chops off everthing before the first instance of the parameter value
DECLARE @ParamValueSubstring varchar(8000) = SubString(@Data, @ParamIndex, 8000)

SELECT @ParamValueSubstring as ParamSubstring

DECLARE @SpaceIndex int = (SELECT CHARINDEX(' ', @ParamValueSubstring))-1
DECLARE @AmpIndex int = (SELECT CHARINDEX('&', @ParamValueSubstring))-1
DECLARE @valueLength int = -1

-- find first instance of ' ' or & after parameter value
IF @SpaceIndex = -1
  SET @valueLength = @AmpIndex
ELSE IF @AmpIndex = -1
  SET @valueLength = @SpaceIndex
ELSE IF @SpaceIndex < @AmpIndex 
  SET @valueLength = @SpaceIndex
ELSE  
  SET @valueLength = @AmpIndex 

IF(@valueLength = -1) -- check to see if there was no space or '&' following the parameter value
BEGIN
   SET @valueLength = 8000
END

select Left(@ParamValueSubstring, @valueLength) as ParamValue

-- approach similar to idea function found here http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/extracting-numbers-with-sql-server/

相关问题