我正在寻找一个可以获取查询字符串的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。
答案 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)