mysql select xml символ между элементами нод

210
01 июня 2018, 14:00

Всем привет! подскажите есть структура xml:

some_tbl.xmldata='<a><b>foo</b><b>bar baz</b></a>'

согласно:

https://dev.mysql.com/doc/refman/8.0/en/xml-functions.html

делаю

select ExtractValue(some_tbl.xmldata, '/a/b') as xml_b from some_tbl where 1

и получаю 'foo bar baz' с пробелом между элементами нод b. Вопрос - можно ли сделать запрос, чтобы элементы были разделены например точкой с запятой.

Замена пробела обёрткой в replace() не получается - потому как в этом случае bar и baz будут разделены ';' 'foo;bar;baz', а требуется получить 'foo;bar baz'.

Answer 1

Желаемый результат требует скрытого unpivot (преобразование одной записи в несколько), чего в MySQL не имеется. Придётся извращаться.

Вариант:

SELECT TRIM(TRAILING ';' FROM ExtractValue(REPLACE(some_tbl.xmldata, '</b>', ';</b>'), '/a/b')) as xml_b 
FROM some_tbl 
WHERE 1
READ ALSO
Процедура mysql

Процедура mysql

первый раз пишу процедуру в mysql пожалуйста поправьте меня

196
Ошибки при импорте csv в mySQL.

Ошибки при импорте csv в mySQL.

После импорта csv в mySQL при попытке удалить строку phpmyadmin выдает вот такую ошибку:

185
Почему может быть Password authentication failed?

Почему может быть Password authentication failed?

Пытаясь сегодня подключится по SSH к MySQL серверу внезапно получил ошибку

183