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

Posted

技术标签:

【中文标题】如何从 SQL 中的 URL 字符串中提取 ID 号?【英文标题】:How to extract an ID number from a URL string in SQL? 【发布时间】:2014-02-11 15:33:10 【问题描述】:

我正在尝试从 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。有关如何正确执行此操作的任何建议?

【问题讨论】:

我不明白,url是你数据库中的一列?或者您是否试图从 webapp 中的当前 url 获取值? 在字符串中查找?ID= 的实例,返回从该点到& 或字符串结尾的所有内容。 抱歉,这是数据库表中的一列。 【参考方案1】:

使用charindex 查找?id 的位置,使用stuff 删除?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);

【讨论】:

这似乎对我有用。我对其进行了一些修改以适合我的解决方案,但结果似乎正是我想要的。谢谢! 它不适用于像http://www.website.com/news/view.aspx?a=1&id=95这样的网址【参考方案2】:

当您想在 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/

【讨论】:

【参考方案3】:

我不太清楚你在问什么。当您在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

【讨论】:

这对我来说真的没有意义。有人添加了标签asp.net,这让我相信他想从当前网址中获取价值。不是很清楚。 我注意到有人建议了这个标签,所以我删除了它,绝对不是 ASP.NET。【参考方案4】:

您可以在 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)

两个例子都在里面,评论其中一个来查看结果

【讨论】:

以上是关于如何从 SQL 中的 URL 字符串中提取 ID 号?的主要内容,如果未能解决你的问题,请参考以下文章

通过删除 Laravel 中的多余字符,从斜杠分隔的 url 中提取参数值

如何从 Python 中的 YouTube 链接中提取视频 ID?

如何从 JavaScript 中的字符串中提取基本 URL?

如何从Oracle SQL中的2个表中提取每个ID的最新记录[重复]

如何从 Javascript 中的 URL 中提取 GET 参数? [复制]

如何使用PHP从此代码中的锚标记中提取id和url?