首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用T-SQL解析URL参数

使用T-SQL解析URL参数
EN

Stack Overflow用户
提问于 2019-03-01 22:02:06
回答 2查看 2.6K关注 0票数 2

我有一些数字营销的网址。这些URL都有参数,所以我想解析URL并插入一个表。用于跟踪活动和分析。

例如:

代码语言:javascript
复制
https://www.example.com/?utm_source=google&utm_medium=blabla&utm_campaign=gameuser&utm_term=winwin&utm_content=takego

我想要像这样插入表格。我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2019-03-02 00:23:25

理想情况下,您将在存储过程中执行此操作,以便可以将工作分解为小块。您可以在一条SQL语句中完成所有这些操作,但是当您使用到最后几个参数时,这就有点像噩梦了!

基本的方法是使用CHARINDEX + SUBSTRING的组合来解析URL...你找到第一个了吗?然后从那里取到第一个&(然后拆分=的两边),然后找到下一个&(按=拆分),然后冲洗并重复。

我已经在这里为你开始了这个过程-你应该能够扩展这个过程,从URL中获得你的其余参数-它有点慢和笨拙,但至少你可以看到发生了什么:

运行这段SQL,你很快就会明白:

代码语言:javascript
复制
declare @str VARCHAR(8000)= 'https://www.example.com/?utm_source=google&utm_medium=blabla&utm_campaign=gameuser&utm_term=winwin&utm_content=takego'

DECLARE @str1 VARCHAR(8000)= SUBSTRING(@str, CHARINDEX( '?',@str, 1)+1, CHARINDEX( '&',@str, 1) -CHARINDEX( '?',@str, 1)-1)

SELECT SUBSTRING(@str1, 1, CHARINDEX( '=',@str1, 1)-1)

SELECT SUBSTRING(@str1, CHARINDEX( '=',@str1, 1)+1, LEN(@Str1))

DECLARE @str2  VARCHAR(8000) = SUBSTRING(@str, CHARINDEX( '?',@str, 1) + len(@str1) + 2, LEN(@str))

SELECT @str2 = SUBSTRING(@str2, 1, CHARINDEX( '&',@str2, 1)-1)

SELECT @str2
票数 1
EN

Stack Overflow用户

发布于 2021-09-08 23:54:34

您可以使用函数

代码语言:javascript
复制
CREATE FUNCTION [dbo].[ufn_ParseQueryString] ( @QueryString AS VARCHAR(MAX) )  RETURNS @QueryStringTable TABLE ( [Key] VARCHAR(100), [Value] VARCHAR(1000) ) AS BEGIN
DECLARE @QueryStringPair        VARCHAR(2000)
DECLARE @Key                    VARCHAR(100)
DECLARE @Value                  VARCHAR(1000)

WHILE LEN(@QueryString) > 0
BEGIN
    SET @QueryStringPair = LEFT ( @QueryString, ISNULL(NULLIF(CHARINDEX('&', @QueryString) - 1, -1), 
                                  LEN(@QueryString)))
    SET @QueryString = SUBSTRING( @QueryString, ISNULL(NULLIF(CHARINDEX('&', @QueryString), 0), 
                                  LEN(@QueryString)) + 1, LEN(@QueryString))

    SET @Key   = LEFT (@QueryStringPair, ISNULL(NULLIF(CHARINDEX('=', @QueryStringPair) - 1, -1), 
                       LEN(@QueryStringPair)))
    SET @Value = SUBSTRING( @QueryStringPair, ISNULL(NULLIF(CHARINDEX('=', @QueryStringPair), 0), 
                            LEN(@QueryStringPair)) + 1, LEN(@QueryStringPair))

    INSERT INTO @QueryStringTable ( [Key], [Value] )
    VALUES ( @Key, @Value )
END

RETURN

结束

和测试

代码语言:javascript
复制
SELECT * FROM [dbo].[ufn_ParseQueryString] ( 'pubid=mdfbgd&utm_source=facebook&utm_medium=digimun&placement=Instagram_Stories' )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54946231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档