2010-09-09 74 views
-1
jkdfhdjfhjh&name=ijkjkjkjkjkjk&id=kdjkjkjkjkjkjjjd&class=kdfjjfjdhfjhf 

上面串有開始&與例如= 結束,我們有&名字的某些字符=,我只是需要這個從上面的字符串。誰能幫我寫一個SQL查詢

同樣我需要& ID =,&類=

我需要一個單一的列下的輸出。

Final Extract 
---------------------- 
&id=, &class=, &name= 

任何人都可以幫我寫出這個查詢。

+2

究竟哪個SQL方言? PostgreSQL的?正則表達式不是ANSI SQL標準AFAIK的一部分。 – 2010-09-09 09:46:54

+2

是否沒有可用的服務器端語言?在大多數情況下,這將是一個函數調用。 – 2010-09-09 09:47:46

+0

所以在SQL數據庫的字段中的字符串,對不對?解決方案是否需要純粹的SQL?我認爲在另一種語言中實現這一點要容易得多。 – Spudley 2010-09-09 09:56:12

回答

1

你可以試試這個:

select regexp_replace('jkdfhdjfhjh&name=ijkjkjkjkjkjk&id=kdjkjkjkjkjkjjjd&class=kdfjjfjdhfjhf', '\\w*?(&.*?=)\\w+((?=&)|$)', '\\1, ', 'g'); 

結果:

 regexp_replace 
------------------------- 
&name=, &id=, &class=, 

然後,它是由你來刪除最後,

regexp_replace函數在版本8.1和之後版本中可用。

1

如果要與每個變量沿着所述值,我會通過分裂的「&」實現此到一個數組,然後取所需的元素的切片:

SELECT (string_to_array('jkdfhdjfhjh&name=ijkjkjkjkjkjk&id=kdjkjkjkjkjkjjjd&class=kdfjjfjdhfjhf','&'))[2:4]; 

輸出中的PostgreSQL 8.4(陣列型):

{name=ijkjkjkjkjkjk,id=kdjkjkjkjkjkjjjd,class=kdfjjfjdhfjhf} 

示例串是很寬,因此,這裏的一般形式,以顯示陣列切片更清楚:

SELECT ((string_to_array(input_field,'&'))[2:4]; 

注意:您必須在string_to_array()調用附近有多餘的括號才能使數組切片正常工作 - 否則將會出錯。

+0

這不是OP想要的。 – Toto 2010-09-09 15:55:22

+0

是的,我意識到,我發佈後,但我認爲,否則,因爲我不知道用什麼解析字段名稱和扔掉相關的值... – 2010-09-09 21:45:24