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

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

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

我需要单列下的输出。

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

谁能帮我写一个查询。

4

2 回答 2

1

你可以试试这个:

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

结果:

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

然后由您决定删除最后一个,.

regexp_replace 函数在 8.1 及更高版本中可用。

于 2010-09-09T12:43:46.677 回答
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() 调用周围加上额外的括号才能使数组切片起作用——否则会出错。

于 2010-09-09T13:46:31.517 回答