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

hsu*_*suk 3 sql t-sql database sql-server get

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

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

让我们说

@url = 'mypage.php?name=This is test&address=Test Address&phone=+9779854125896'
Run Code Online (Sandbox Code Playgroud)

然后,我需要一个像SQL一样的SQL函数

select getURLparams('name', @url)
Run Code Online (Sandbox Code Playgroud)

应该回来

This is test
Run Code Online (Sandbox Code Playgroud)

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

我在SQL Sever 2008 R2上.

Tec*_*hDo 5

请尝试下面的查询,它以querystring name作为参数返回querystring值:

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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)