SQL Сервер & XML: как я могу получить атрибут xml из таблицы sql? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть такая таблица:

create table product 
(
    id integer, 
    category varchar(50), 
    quantity integer, 
    techdata varchar(100), 
    cost_price float
);

insert into product 
values (1, 'window', 2, '<Data w="1000" h="1000"/>', 100.56),
       (2, 'door', 1, '<Data w="900" h="1800"/>', 96.12),
       (3, 'window', 20, '<Data w="750" h="300"/>', 152.5),
       (4, 'door', 100, '<Data w="1046" h="2046"/>', 46.74),
       (5, 'window', 1, null, null);

Я должен выбрать все значения атрибутов 'w' и 'h' из этих строк. Я пробовал это решение, но оно не работает.

SELECT 
    t.p.value('(@w)[1]', 'VARCHAR(50)') AS width,
    t.p.value('(@h)[1]', 'VARCHAR(50)') AS height
FROM 
    product 
CROSS APPLY 
    techdata.nodes('/Data') t(p)

Любой намек на правильное решение?

1 Ответ

2 голосов
/ 05 марта 2020

Я думаю, что ваша проблема в том, что столбец techdata не является XML типом.

Попробуйте это

select
    CONVERT(xml, techdata).value('(/Data/@w)[1]', 'int') as Width,
    CONVERT(xml, techdata).value('(/Data/@h)[1]', 'int') as Height
from product
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...