2013-09-23 30 views
2

我在尋找一個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函數可以使其可行。 –

回答

5

請嘗試以下查詢與查詢字符串名稱作爲參數返回查詢字符串值:

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

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

雖然在參數「@名稱」中賦值「phone」,它給例外。 – TechDo

+0

它會,我已經採取了許多假設。我正在努力削減大部分。 – Luv