Сумма элементов длительности XML в SQL2008 - PullRequest
2 голосов
/ 24 марта 2010

У меня есть столбец 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-запрос, чтобы взять сумму моего элемента времени перемещения. В основном мне нужна сумма времени перемещения каждого игрока. Таким образом, используя приведенный выше пример, у 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 голосов
/ 28 марта 2010

Я не уверен, работает ли это на 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.

...