我正在尝试选择一个url
的一部分,它位于通配符表达式之后,而另一个表达式之前使用SQL Server 2008 R2
。
我有一个网址:
https%www.msn.com%2ftokenauth%mapserver%ftoken%aogvgkooo%json
或:
https%www.msn.com%2ftokenauth%mapserver%token=aogvgkooo%json.
如何编写sql
查询仅显示aogvgkooo
? url
存储在名为url
的列中。
这是我的选择声明:
select REPLACE(REPLACE(url, 'token=', ''),'%json', '')
答案 0 :(得分:0)
这个也给出了一个例子
答案 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','')
答案 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
的第一次出现直至第二次出现%
,然后再次反转。