如何从 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的最新记录[重复]