sql - SQL Server & XML:如何从 sql 表中获取 xml 属性?
问题描述
我有一张这样的桌子:
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)
任何提示适当的解决方案?
解决方案
我认为您的问题是 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
推荐阅读
- ionic-framework - 图片未在 gmail 上使用社交分享插件分享
- python - 如何合并和更新熊猫数据框
- python - 如何为 Python 3.7.2 安装 Pycrypto?
- string - str_to_hive 函数将字符串的每个字符拆分为键
- sql - 在 where 子句中使用 if not exists
- javascript - Href 链接目标 在移动视图的同一选项卡中打开
- swift - 如何在我的 swift 框架中使用核心数据
- sql-server - sql server中的case和if子句
- sql - 无法绑定多部分标识符
- html5-canvas - 如何在 FabricJS 中缩放 ClipTo 区域?