Страницы

Поиск по вопросам

суббота, 15 июня 2019 г.

T-SQL: Как распарсить такую XML

Имеем XML:
Message has been delivered
Пробую так:
select top 100 ms.[stat].value('(status/message id/text())[1]', 'varchar(50)')
Ошибка:
XQuery [dbo.Statuses.stat.value()]: Syntax error near '[', expected a step expression.
Как правильно ее распарсить?
Спасибо


Ответ

Атрибуты запрашиваются так [stat].value('(/status/message/@id)[1]', 'char(10)')
Текст запрашивается так [stat].value('(/status/state/text())[1]', 'varchar(50)')
Пару слов о типах. Если varchar(n) - вернёт "правильную строку". char(n) - дополнит недостающие символы пробелами. Если int то в случае ошибки конвертирование в число - даст ошибку.
Как на mssql проверить быстро:
select [stat].query('/status/message'), [stat].value('(/status/state/text())[1]', 'varchar(50)') from (select cast( ' Message has been delivered ' as xml) stat) t
Вариант проще
declare @x xml set @x = '1' select @x.value('(/a/text())[1]','int')
Если хотите запросить ветку - использовать [stat].query('/status/message')
Полезные ссылки so-En msdn-примеры

Комментариев нет:

Отправить комментарий