jkdfhdjfhjh&name=ijkjkjkjkjkjk&id=kdjkjkjkjkjkjjjd&class=kdfjjfjdhfjhf
上面的字符串有一些以 & 开头并以 = 结尾的字符,例如我们有 &name= ,我只需要上面字符串中的这个。
同样我需要 &id=, &class=
我需要单列下的输出。
Final Extract
----------------------
&id=, &class=, &name=
谁能帮我写一个查询。
jkdfhdjfhjh&name=ijkjkjkjkjkjk&id=kdjkjkjkjkjkjjjd&class=kdfjjfjdhfjhf
上面的字符串有一些以 & 开头并以 = 结尾的字符,例如我们有 &name= ,我只需要上面字符串中的这个。
同样我需要 &id=, &class=
我需要单列下的输出。
Final Extract
----------------------
&id=, &class=, &name=
谁能帮我写一个查询。
你可以试试这个:
select regexp_replace('jkdfhdjfhjh&name=ijkjkjkjkjkjk&id=kdjkjkjkjkjkjjjd&class=kdfjjfjdhfjhf', '\\w*?(&.*?=)\\w+((?=&)|$)', '\\1, ', 'g');
结果:
regexp_replace
-------------------------
&name=, &id=, &class=,
然后由您决定删除最后一个,
.
regexp_replace 函数在 8.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() 调用周围加上额外的括号才能使数组切片起作用——否则会出错。