Добрый вечер!
У меня имеется простая база данных, в которой хранится xml - данные, в данном случае автор книги и её текст.
Вопрос как осуществить поиск типа LIKE, чтобы не писать полное содержание книги или полностью автора.
На данный момент я делаю такой запрос:
SELECT * from storage where (xpath('//book/author/text()', documentcontent))[1]::text = 'Толстой Лев Николаевич'::text;
Ответ
Вообщем получилось у меня найти ответ, вышло их целых два.
Первый вариант вытаскивает только ОДНО значение вместе с тегами из XML документа хранящегося в таблице:
SELECT unnest(xpath('//ЗДЕСЬ УКАЗАТЬ УЗЕЛ/*[contains(text(),"ТУТ НАПИСАТЬ ИЛИ УКАЗАТЬ ЧАСТЬ ТЕКСТА, КОТОРЫЙ ХРАНИТСЯ В XML")]', ТУТ УКАЗАТЬ ИМЯ ПОЛЯ::xml))::text AS XMLDATA FROM ТУТ УКАЗАТЬ ИМЯ ТАБЛИЦЫ;
Второй вариант вытаскивает ВСЕ значение вместе с тегами из XML документа хранящиеся в таблице:
SELECT * from ТУТ УКАЗАТЬ ИМЯ ТАБЛИЦЫ where (xpath('//ЗДЕСЬ УКАЗАТЬ УЗЕЛ', ТУТ УКАЗАТЬ ИМЯ ПОЛЯ))[1]::text ILIKE '%ТУТ УКАЗАТЬ ФРАЗУ ЧАСТЬЮ ИЛИ ЦЕЛИКОМ'::text;
Надеюсь вам поможет.
Комментариев нет:
Отправить комментарий