URL的SQL子字符串

时间:2014-02-28 00:48:43

标签: sql sql-server sql-server-2008 sql-server-2008-r2 substring

我正在尝试选择一个url的一部分,它位于通配符表达式之后,而另一个表达式之前使用SQL Server 2008 R2

我有一个网址:

https%www.msn.com%2ftokenauth%mapserver%ftoken%aogvgkooo%json

或:

https%www.msn.com%2ftokenauth%mapserver%token=aogvgkooo%json.

如何编写sql查询仅显示aogvgkooourl存储在名为url的列中。

这是我的选择声明:

select REPLACE(REPLACE(url, 'token=', ''),'%json', '') 

5 个答案:

答案 0 :(得分:0)

你看过SUBSTRING,CHARINDEX或PATINDEX函数吗?这个网站给出了很好的解释:

http://social.technet.microsoft.com/wiki/contents/articles/17948.t-sql-right-left-substring-and-charindex-functions.aspx

这个也给出了一个例子

http://sqlzoo.net/howto/source/u.cgi/tip238311/sqlserver

答案 1 :(得分:0)

DECLARE @url varchar(100)

SET @url ='https%www.msn.com%2ftokenauth%mapserver%token=aogvgkooo%json'

SELECT Replace(Replace(Replace(@url,substring(@url,1,Patindex('%token=%',@url)-1),''),'token=',''),'%json','')

sql fiddler

答案 2 :(得分:0)

用户定义的功能可能是一个不错的选择。

create function findToken (
  @url nvarchar(max),
  @tag nvarchar(100),
  @after nvarchar(100)
) returns nvarchar(max) as begin
    declare @token nvarchar(max);
    declare @start int = charindex(@tag,@url) + len(@tag);
    declare @justPast int = charindex(@after,@url,@start);
    if @start = len(@tag) or @justPast = 0
      return NULL;
    return substring(@url,@start,@justPast-@start)
end;
go

declare @url varchar(100);

set @url ='https%www.msn.com%2ftokenauth%mapserver%token=aogvgkooo%json';

select
  dbo.findToken(@url,'token=','%json');

答案 3 :(得分:0)

DECLARE @url nvarchar(255),
        @startPos nvarchar(100),
        @endPos nvarchar(100)

SET @url ='https%www.msn.com%2ftokenauth%mapserver%token=aogvgkooo%json'
SET @startPos = 'token%'
SET @endPos = '%json'

SELECT SUBSTRING(@url,CHARINDEX(@startPos,REPLACE (@url,'=','%'),0)+ LEN(@startPos) ,CHARINDEX(@endPos,REPLACE (@url,'=','%'),0)-(CHARINDEX(@startPos,REPLACE (@url,'=','%'),0)+ LEN(@startPos)))

答案 4 :(得分:0)

更一般的方法:

DECLARE @s VARCHAR(100) = 'https%www.msn.com%2ftokenauth%mapserver%ftoken%aogvgkooo%json'

SELECT  REVERSE(SUBSTRING(
                            REVERSE(@s), 
                            CHARINDEX('%', REVERSE(@s)) + 1,
                            CHARINDEX('%', REVERSE(@s),  CHARINDEX('%', REVERSE(@s)) + 1) -
                                                         CHARINDEX('%', REVERSE(@s)) - 1))

反转字符串,然后从substring的第一次出现直至第二次出现%,然后再次反转。