我正在尝试从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转换。有关如何正确执行此操作的任何建议吗?
答案 0 :(得分: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);
答案 1 :(得分:0)
我不清楚你在问什么。当您在asp.net
应用程序中时,您是否在询问如何从URL获取id的值?然后在你背后的代码中
在c#
中string id = Request.QueryString["id"]; // returns null if id not found
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/