任何人都可以帮我写一个SQL查询

时间:2010-09-09 09:45:04

标签: sql postgresql netezza

jkdfhdjfhjh&name=ijkjkjkjkjkjk&id=kdjkjkjkjkjkjjjd&class=kdfjjfjdhfjhf

上面的字符串有一些字符以&开头。以=结尾 例如,我们有& name =,我只需要上面的字符串。

同样我需要& id =,& class =

我需要在一列下输出。

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

任何人都可以帮我写一个查询。

2 个答案:

答案 0 :(得分: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 :(得分: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()调用周围加上额外的括号才能使数组切片工作 - 否则会出错。