使用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上。
答
请尝试以下查询与查询字符串名称作为参数返回查询字符串值:
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
答
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)
我明白你需要但你有什么问题? –
实际上,我需要创建一个触发器来更新包含url的列并对url的特定参数进行编码,因此要编码该特定参数,首先我需要提取参数值 – hsuk
解析URL真的不是一件好事尝试使用T-SQL。可以访问.NET框架的CLR函数可以使其可行。 –