Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

WEEK

日付式に対して年における週を整数として返す日付関数です。

Synopsis

{fn WEEK(date-expression)}

引数

date-expression 列の名前や、他のスカラ関数の結果、または日付やタイムスタンプ・リテラルである式。

概要

WEEK は、date-expression を受け取り、その日付に対するその年の初めからの週の数を返します。

既定では、週は $HOROLOG 日付 (1840 年 12 月 31 日からの日数) を使用して計算されます。したがって、週は年と年をまたいでカウントされ、Week 1 は前年の最後の週から開始された 7 日間を終了した週となります。週は常に日曜日から始まり、したがって、暦年の最初の日曜日は、Week 1 から Week 2 への切り替えを意味します。その年の最初の日曜日が 1 月 1 日である場合、その日曜日は Week 1 になります。その年の最初の日曜日が 1 月 1 日より後の場合、その日曜日は Week 2 の第 1 日目になります。このため、Week 1 は、一般的には、7 日間より短くなります。DAYOFWEEK 関数を使用すると、週の曜日を決定できます。1 年の週の合計数は、一般的に 53 です。うるう年には 54 になります。

Caché では、1 年の週の決定について ISO 8601 規格もサポートしています。この規格は、主にヨーロッパの国で使用されます。Caché が ISO 8601 用に構成されている場合、WEEK は週を月曜日からカウントし、週はその週の木曜日が含まれる年に割り当てられます。例えば、2004 年の Week 1 は、週の木曜日が 2004 年 1 月 1 日で 2004 年最初の木曜日であるため、2003 年 12 月 29 日の月曜日から 2004 年 1 月 4 日の日曜日までです。2005 年の Week 1 は、木曜日が 2005 年 1 月 6 日で 2005 年最初の木曜日であるため、2005 年 1 月 3 日から 2005 年 1 月 9 日までになります。1 年の合計週数は、通常は 52 ですが 53 のこともあります。ISO 8601 のカウントを有効にするには、SET ^%SYS("sql","sys","week ISO8601")=1 とします。

date-expression には、Caché 日付整数、$HOROLOG 値や $ZTIMESTAMP 値、ODBC 形式の日付文字列、またはタイムスタンプを指定できます。

date-expression タイムスタンプはデータ型 %Library.TimeStampOpens in a new tab (yyyy-mm-dd hh:mm:ss.fff) です。

タイムスタンプの時刻部分は評価されないので省略可能です。date-expression は、%Library.FilemanDate、%Library.FilemanTimestamp、%MV.Date のいずれかのデータ型として指定することもできます。

DATEPART または DATENAME 関数を使用しても、DAYOFWEEK と同じ週情報が返されます。

この関数は、ObjectScript から WEEK()Opens in a new tab メソッド呼び出しを使用して呼び出すこともできます。

$SYSTEM.SQL.WEEK(date-expression)

日付の検証

WEEK は、入力値に対して以下のチェックを実行します。値がチェックに失敗した場合は、NULL 文字列が返されます。

  • 日付文字列は完全であると同時に、要素数、各要素の桁数、および区切り文字に適切な形式が使用されている必要があります。年は 4 桁で指定される必要があります。

  • 日付値は、有効な範囲内にある必要があります。年は 1841 から 9999、月は 1 から 12、日は 1 から 31 がそれぞれ有効範囲です。

  • 月の日数は、該当月と該当年に合ったものでなければなりません。例えば、日付 '02-29' が有効なのは、指定された年がうるう年の場合のみです。

  • 10 よりも小さい日付値の先頭のゼロは、記載、省略のどちらでもかまいません。その他の非標準的な整数値は許可されません。例えば、'07' または '7' は有効な日値ですが、'007'、'7.0'、または '7a' は無効です。

以下の埋め込み SQL の例は、2005 年 1 月 2 日 (日曜日) と 2006 年 1 月 1 日 (日曜日) の週の曜日と通算週を返します。

  SET x="2005-1-2"
  SET y="2006-1-1"
  &sql(SELECT {fn DAYOFWEEK(:x)},{fn WEEK(:x)},
       {fn DAYOFWEEK(:y)},{fn WEEK(:y)}
  INTO :a,:b,:c,:d)
  IF SQLCODE'=0 {
    WRITE !,"Error code ",SQLCODE }
  ELSE {
    WRITE !,"2005 Day of Week is: ",a," (Sunday=1)"
    WRITE " Week of Year is: ",b
    WRITE !,"2006 Day of Week is: ",c," (Sunday=1)"
    WRITE " Week of Year is: ",d }

以下の例は、与えられた日付が 2004 年の第 9 週目にあたるので、9 を返します。

SELECT {fn WEEK('2004-02-25')} AS Wk_Date,
       {fn WEEK('2004-02-25 08:35:22')} AS Wk_Tstamp,
       {fn WEEK(59590)} AS Wk_DInt

以下の例は、54 を返します。これは、この例のすぐ後に続く例で示されているように、この特定の日付が 2 日目に開始する Week 2 で始まるうるう年にあるためです。

SELECT {fn WEEK('2000-12-31')} AS Week
SELECT {fn WEEK('2000-01-01')}||{fn DAYNAME('2000-01-01')} AS WeekofDay1,
       {fn WEEK('2000-01-02')}||{fn DAYNAME('2000-01-02')} AS WeekofDay2

以下の例はすべて、現在の週を返します。

SELECT {fn WEEK({fn NOW()})} AS Wk_Now,
       {fn WEEK(CURRENT_DATE)} AS Wk_CurrD,
       {fn WEEK(CURRENT_TIMESTAMP)} AS Wk_CurrTS,
       {fn WEEK($HOROLOG)} AS Wk_Horolog,
       {fn WEEK($ZTIMESTAMP)} AS Wk_ZTS

以下の埋め込み SQL の例は、Caché の既定の年における週と、ISO 8601 規格が適用された年における週を示しています。

TestISO
  SET def=$DATA(^%SYS("sql","sys","week ISO8601"))
  IF def=0 {SET ^%SYS("sql","sys","week ISO8601")=0}
  ELSE {SET isoval=^%SYS("sql","sys","week ISO8601")}
     IF isoval=1 {GOTO UnsetISO }
     ELSE {SET isoval=0 GOTO WeekOfYear }
UnsetISO
  SET ^%SYS("sql","sys","week ISO8601")=0
WeekOfYear
  &sql(SELECT {fn WEEK($HOROLOG)} INTO :a)
  WRITE "For Today:",!
  WRITE "default week of year is ",a,!
  SET ^%SYS("sql","sys","week ISO8601")=1
  &sql(SELECT {fn WEEK($HOROLOG)} INTO :b)
  WRITE "ISO8601 week of year is ",b,!
ResetISO
  SET ^%SYS("sql","sys","week ISO8601")=isoval

関連項目

FeedbackOpens in a new tab