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

问题描述:

我在寻找一个SQL函数,它可以在某种意义上获取查询字符串,URL存储在一个变量中。使用SQL获取和删除查询字符串

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

比方说

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

然后,我需要一个像

select getURLparams('name', @url) 

SQL函数应该返回

This is test 

而且,如何删除特定的查询字符串,所以我可以附加更新的一个。

我在SQL Sever 2008 R2上。

+0

我明白你需要但你有什么问题? –

+0

实际上,我需要创建一个触发器来更新包含url的列并对url的特定参数进行编码,因此要编码该特定参数,首先我需要提取参数值 – hsuk

+2

解析URL真的不是一件好事尝试使用T-SQL。可以访问.NET框架的CLR函数可以使其可行。 –

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

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('&'[email protected]+'=', 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, [email protected]) 
FROM(
    SELECT 
     (CASE WHEN CHARINDEX('&', v)>0 then SUBSTRING(v, 0, CHARINDEX('&', v)) 
     ELSE V END) vv, 
     (CASE WHEN CHARINDEX('?'[email protected]+'=', @url)>0 
        THEN '?'[email protected]+'=' 
        ELSE '&'[email protected]+'=' END) Ch 
    FROM(
     SELECT SUBSTRING(@url, CHARINDEX(@param+'=', @url)+LEN(@param)+1, len(@url)) v 
     WHERE CHARINDEX('&'[email protected]+'=', REPLACE(@url, '?', '&'))>0 
    )x 
)xx 
+0

非常感谢,它的工作,有没有什么办法来删除一个特定的参数?所以,我可以附加更新的参数 – hsuk

+0

您的意思是为特定查询字符串分配新值? – TechDo

+0

是啊...我正在考虑删除特定的参数,并再次分配......分配不会是一个问题......我发现难以删除 – hsuk

您需要创建一个使用正则表达式的CLR函数。 阅读SQL Server: Regular Expressions了解更多信息。

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) 
+0

虽然在参数“@名称”中赋值“phone”,它给例外。 – TechDo

+0

它会,我已经采取了许多假设。我正在努力削减大部分。 – Luv