2010-09-09 76 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