使用SQL获取和删除查询字符串

时间:2013-09-23 06:31:35

标签: sql sql-server database tsql get

我正在寻找一个可以获取查询字符串的SQL函数,URL存储在变量中。

实际上,我需要创建一个触发器,它将更新包含url的列并对url的特定查询字符串进行编码,因此要对该特定查询字符串进行编码,首先我需要提取查询字符串值。

让我们说

@url = 'mypage.php?name=This is test&address=Test Address&phone=+9779854125896'

然后,我需要一个像

这样的SQL函数
select getURLparams('name', @url)

应返回

This is test

并且,如何删除特定的查询字符串,以便我可以附加更新的字符串。

我在使用SQL Sever 2008 R2。

3 个答案:

答案 0 :(得分:5)

请尝试以下查询,该查询以querystring name作为参数返回查询字符串值:

declare @url nvarchar(max) = 'mypage.php?name=This is test&address=Test Address&phone=+9779854125896'

declare @param nvarchar(max)='phone'

SELECT 
    (CASE WHEN CHARINDEX('&', v)>0 THEN SUBSTRING(v, 0, CHARINDEX('&', v))
    ELSE V END)
FROM(
    SELECT SUBSTRING(@url, CHARINDEX(@param+'=', @url)+LEN(@param)+1, len(@url)) v
    WHERE CHARINDEX('&'+@param+'=', REPLACE(@url, '?', '&'))>0
)x

要更改现有查询字符串的值,请尝试:

declare @url nvarchar(max) = 'mypage.php?name=This is test&address=Test Address&phone=+9779854125896'

declare @param nvarchar(max)='name'
declare @NewValu nvarchar(max)='Test'


SELECT 
    REPLACE(@url, Ch+vv, Ch+@NewValu)
FROM(
    SELECT  
        (CASE WHEN CHARINDEX('&', v)>0 then SUBSTRING(v, 0, CHARINDEX('&', v))
        ELSE V END) vv,
        (CASE WHEN CHARINDEX('?'+@param+'=', @url)>0 
                    THEN '?'+@param+'='
                    ELSE '&'+@param+'=' END) Ch
    FROM(
        SELECT SUBSTRING(@url, CHARINDEX(@param+'=', @url)+LEN(@param)+1, len(@url)) v
        WHERE CHARINDEX('&'+@param+'=', REPLACE(@url, '?', '&'))>0
    )x
)xx

答案 1 :(得分:0)

您需要创建一个使用Regex的CLR功能。 请阅读SQL Server: Regular Expressions以获取更多信息。

答案 2 :(得分:0)

declare @url as varchar(800)
set @url = 'mypage.php?name=This is test&address=Test Address&phone=+9779854125896'
declare @name as varchar(800)
set @name='name'

select SUBSTRING(@url,CHARINDEX(@name,@url,1)+len(@name)+1,
            convert(int,CHARINDEX('&',@url,1))-convert(int,CHARINDEX(@name,@url,1)+len(@name))-1)