Может кто-нибудь помочь мне написать запрос SQL - PullRequest
0 голосов
/ 09 сентября 2010
jkdfhdjfhjh&name=ijkjkjkjkjkjk&id=kdjkjkjkjkjkjjjd&class=kdfjjfjdhfjhf

В приведенной выше строке есть несколько символов, начинающихся с & и заканчивающихся = например, у нас есть & name =, и мне просто нужно это из приведенной выше строки.

аналогично мне нужно & id =, & class =

Мне нужен вывод под одним столбцом.

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

Может кто-нибудь помочь мне написать запрос для этого.

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

Если вы хотите получить значения вместе с каждой переменной, я бы реализовал это, разделив символ «&» на массив, а затем взяв часть нужных элементов:

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 () - иначе вы получите ошибку.

1 голос
/ 09 сентября 2010

Вы можете попробовать это:

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

результат:

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

Затем вы можете удалить последние ,.

Функция regexp_replaceдоступно в версии 8.1 и после.

...