我有一个XML列,其中包含有关我的游戏的信息 . 这是一个信息样本 .
<game xmlns="http://my.name.space" >
<move>
<player>PlayerA</player>
<start movetype="Move">EE5</start>
<end movetype="Move">DF6</end>
<movetime>PT1S</movetime>
</move>
<move>
<player>PlayerB</player>
<start movetype="Move">CG7</start>
<end movetype="Move">DE6</end>
<movetime>PT3S</movetime>
</move>
<move>
<player>PlayerA</player>
<start movetype="Move">FD3</start>
<end movetype="Move">EG8</end>
<movetime>PT4S</movetime>
</move>
</game>
我正在尝试设计一个XML查询来获取我的movetime元素的总和 . 基本上我需要每个球员移动时间的总和 . 因此,使用上面的示例,PlayerA的总移动时间为5秒,而PlayerB的总移动时间为3秒 .
这是我目前一直在使用的XML查询
SELECT GameHistory.query('declare default element namespace "http://my.name.space"; data(/game/move/movetime)') AS Value FROM GamesWHERE Id=560
我是XSLT / XPATH功能的新手:P
UPDATE
movetime元素目前包含一个完整的持续时间;因此,如果玩家以1:1:23进行移动,那么它将保存为PT1H1M23S
虽然如果它更容易,我确实有能力改变它,以便它只存储总秒数 .
1 回答
我不确定这是否适用于SQL服务器,但返回PlayerAs移动总和的简单查询是:
请注意,xs:dayTimeDuration曾被称为xdt:dayTimeDuration;我不确定SQL Server使用哪个版本 .
XQuery只允许你对xs:dayTimeDuration和xs:yearMonthDuration值求和,所以这就是为什么我在dayTimeDuration中添加了一个显式的强制转换 .