2015-06-28 87 views
0

我試圖從URL中的SQL Server中的列解析信息2012SQL URL字符串內子字符串變量文本

的基本結構是

http://www.domainsomething.com/?test/campaign=abc&kwd=jdc ftp&catgory=brnd 

,我需要抓住從參數值爲kwd=。在上面的例子中,這將是'jdc ftp',但是對於我列中的所有URL,這可能會有所不同。我試過CHARINDEXLEN,但我似乎無法正確地將語法放在一起。

+0

播放顯示您的「失敗」代碼 – Amit

+0

這真的不是你想在SQL Server中做一些事情。在一個好的設計中,客戶端應用程序可以是任何東西,不只是一個Web應用程序你不應該在你的SQL代碼中深入研究HTML的內容 - 將它分解成你期望的參數,並讓調用代碼將其排除。 – LoztInSpace

回答

1

試試這個:

DECLARE @URL varchar(100) = 'http://www.domainsomething.com/?test/campaign=abc&kwd=jdc ftp&catgory=brnd' 

SELECT SUBSTRING(
     @URL, 
     CHARINDEX('kwd=', @URL)+4, 
     CASE WHEN CHARINDEX('&', @URL, CHARINDEX('kwd=', @URL)+5) > 0 THEN 
     CHARINDEX('&', @URL, CHARINDEX('kwd=', @URL)+5) 
     - (CHARINDEX('kwd=', @URL)+4) 
     ELSE 
      LEN(@URL) 
     END 
     ) 

這也將處理情況下,當KWD是在查詢字符串中的最後一個或第一個變量。

你可以用它自己在this sql fiddle.

+0

我建議'CHARINDEX('kwd =',@URL +'kwd =')+ 4'返回一個沒有'kwd ='的網址'') –

+0

@ shA.t這可能是個好東西的想法,但它依賴於業務邏輯。我假設一個沒有kwd參數的url應該引發一個錯誤。 –