我有一个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
更新
movetime元素目前包含一个完整的持续时间;因此,如果玩家以1:1:23进行移动,那么它将保存为PT1H1M23S
虽然如果它更容易,但我确实有能力改变它,以便它只存储总秒数。
答案 0 :(得分:0)
我不确定这是否适用于SQL服务器,但返回PlayerAs移动总和的简单查询是:
declare default element namespace "http://my.name.space";
sum(/game/move[player="PlayerA"]/movetime/xs:dayTimeDuration(.))
请注意,xs:dayTimeDuration曾被称为xdt:dayTimeDuration;我不确定SQL服务器使用哪个版本。
XQuery只允许你对xs:dayTimeDuration和xs:yearMonthDuration值求和,所以这就是我为dayTimeDuration添加了一个显式转换的原因。