首页 文章

SQL2008中XML持续时间元素的总和

提问于
浏览
2

我有一个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 回答

  • 0

    我不确定这是否适用于SQL服务器,但返回PlayerAs移动总和的简单查询是:

    declare default element namespace "http://my.name.space";
    sum(/game/move[player="PlayerA"]/movetime/xs:dayTimeDuration(.))
    

    请注意,xs:dayTimeDuration曾被称为xdt:dayTimeDuration;我不确定SQL Server使用哪个版本 .

    XQuery只允许你对xs:dayTimeDuration和xs:yearMonthDuration值求和,所以这就是为什么我在dayTimeDuration中添加了一个显式的强制转换 .

相关问题