2

xqueryで前週の日(mon-sun)を取得することは可能ですか?

4

2 に答える 2

2

たまたま純粋なXPath2.0式である別の解決策

for $vSunday in xs:date('2012-07-08'),
    $thisWeekDay in
       abs((current-date() - $vSunday) div xs:dayTimeDuration('P1D'))
      mod 7 +1,
    $lastWeekSunday in
       current-date() - xs:dayTimeDuration(concat('P',$thisWeekDay+7,'D')),
    $i in 1 to 7,
    $d in $lastWeekSunday + xs:dayTimeDuration(concat('P', $i, 'D'))
  return
    (concat(year-from-date($d),
            '-', month-from-date($d),
            '-', day-from-date($d)),
     ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')
                                                                        [$i],
     '
')

今日(2012-07-08)実行すると、結果は次のようになります。

 2012-7-1 Sunday 
 2012-7-2 Monday 
 2012-7-3 Tuesday 
 2012-7-4 Wednesday 
 2012-7-5 Thursday 
 2012-7-6 Friday 
 2012-7-7 Saturday 
于 2012-07-08T18:16:44.440 に答える
0

FunctX XQuery Libraryをご覧ください。これらは、いくつかの追加の日付関数の概要と追加の日付関数を提供します。

このパターンを使用して、たとえば。7日前の日付を計算します。

fn:current-date() - xs:dayTimeDuration('P7D')

FunctX'day-of-week()は、日付の曜日を計算するのに役立ちます。

FunctXライブラリ全体を解析すると、クエリが非常に遅くなる可能性があるため(XQueryエンジンによって異なります)、必要なコードのみをコピーすることもできます。

このコードは、過去7日間の曜日を返します(先週はピリオドと見なされます)。コードには、Guntherfunctx:day-of-weekがコメントで説明した修正が含まれています。

declare namespace functx = "http://www.functx.com"; 
declare function functx:day-of-week 
  ( $date as xs:anyAtomicType? )  as xs:integer? {

  if (empty($date))
  then ()
  else xs:integer((xs:date($date) - adjust-date-to-timezone(xs:date('1901-01-06'), timezone-from-date(xs:date($date)))
          div xs:dayTimeDuration('P1D')) mod 7
 } ;

for $day in 1 to 7
let $date := fn:current-date() - xs:dayTimeDuration(concat('P', 8-$day, 'D'))
return <day date="{ $date }">{ functx:day-of-week($date) }</day>

これがあなたが探しているものと正確に一致しない場合(あなたが考えたコード、入力と期待される出力を常に質問に含めてください)、あなたはあなたのニーズに合うようにそれを変更できると確信しています。

于 2012-07-08T16:55:36.413 に答える