【问题标题】:How to extract an ID number from a URL string in SQL?如何从 SQL 中的 URL 字符串中提取 ID 号?
【发布时间】: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= 的实例,返回从该点到& 或字符串结尾的所有内容。
  • 抱歉,这是数据库表中的一列。

标签: sql sql-server


【解决方案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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2011-01-07
      • 2011-05-22
      相关资源
      最近更新 更多