4

我正在寻找一个可以从某种意义上获取查询字符串的 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 上。

4

3 回答 3

6

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

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
于 2013-09-23T06:46:22.613 回答
0

您需要创建一个使用 Regex 的 CLR 函数。阅读SQL Server:正则表达式以获取更多信息。

于 2013-09-23T06:45:16.010 回答
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)
于 2013-09-23T06:54:42.353 回答