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?

DAYOFWEEK

日付式に対する曜日を整数として返す日付関数です。

Synopsis

{fn DAYOFWEEK(date-expression)}

引数

date-expression ODBC 形式または $HOROLOG 形式の有効な日付 (時刻コンポーネントの指定あり、または指定なし)。列の名前や、他のスカラ関数の結果、または日付やタイムスタンプ・リテラルである式

概要

DAYOFWEEKdate-expression を受け取り、その日付の曜日に対応する整数を返します。曜日は週の最初の曜日からカウントされます。Caché の既定では、週の最初の曜日は日曜日です。そのため、既定では、返り値が示す曜日は以下のとおりです。

  • 1 — 日曜日

  • 2 — 月曜日

  • 3 — 火曜日

  • 4 — 水曜日

  • 5 — 木曜日

  • 6 — 金曜日

  • 7 — 土曜日

週の最初の曜日の設定” の説明のとおり、システム全体で、または特定のネームスペースに対して、既定の週の最初の曜日をオーバーライドできます。

ObjectScript の $ZDATE および $ZDATETIME 関数は、0 から 6 まで (1 から 7 ではない) の数値で曜日をカウントします。

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 または TO_DATE 関数を使用して、同じ曜日情報を取得できます。曜日の名前を返すには、DAYNAMEDATENAME、または TO_DATE を使用します。

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

$SYSTEM.SQL.DAYOFWEEK(date-expression)

日付の検証

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

  • 有効な date-expression は、日付文字列 (yyyy-mm-dd)、日付/時刻文字列 (yyyy-mm-dd hh:mm:ss)、Caché 日付整数、または $HOROLOG 値で構成されます。DAYOFWEEK は、date-expression の日付部分のみを評価します。

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

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

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

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

週の最初の曜日の設定

既定では、週の最初の曜日は日曜日です。この既定値は、SET ^%SYS("sql","sys","day of week")=n と指定してシステム全体でオーバーライドできます。 n の値は、1 (月曜日) ~ 7 (日曜日) です。週の最初の曜日を月曜日に設定するには、SET ^%SYS("sql","sys","day of week")=1 と指定します。月曜日が週の最初の曜日の場合、水曜日の date-expression は 3 を返します。日曜日が週の最初の曜日の場合に返される 4 ではありません。Caché の既定 (日曜日が週の最初の曜日) をリセットするには、SET ^%SYS("sql","sys","day of week")=7 と指定します。

特定のネームスペースの週の最初の曜日を設定するには、SET ^%SYS("sql","sys","day of week",namespace)=n と指定します。n の値は、1 (月曜日) ~ 7 (日曜日) です。USER ネームスペースの週の最初の曜日を月曜日に設定するには、SET ^%SYS("sql","sys","day of week","USER")=1 と指定します。ネームスペース・レベルで週の最初の曜日を設定した後、SET ^%SYS("sql","sys","day of week")=n と指定してシステム全体の設定を変更しても、そのネームスペースには反映されません。そのネームスペースの既定の週の最初の曜日を変更する機能をリストアするには、^%SYS("sql","sys","day of week",namespace) を削除する必要があります。以下の例を参照してください。

Caché では、曜日やその年の何週目かなどの日付設定を決定するための ISO 8601 標準もサポートされています。この規格は、主にヨーロッパの国で使用されます。ISO 8601 標準では、週の最初の曜日は月曜日です。ISO 8601 をアクティブにするには SET ^%SYS("sql","sys","week ISO8601")=1 を指定し、非アクティブにするには、この値を 0 に設定します。week ISO8601 がアクティブになっており、Caché の day of week が定義されていないか既定 (7=日曜日) に設定されている場合は、ISO 8601 標準が Caché の既定よりも優先されます。Caché の day of week がこれ以外の値に設定されている場合は、その値によって DAYOFWEEKweek ISO8601 がオーバーライドされます。以下の例を参照してください。

以下の例では、両方の選択項目が数値 6 (日曜日が週の最初の曜日に設定されている場合) を返します。なぜなら、指定された date-expression (63876 = November 20, 2015) が金曜日であるためです。

SELECT {fn DAYOFWEEK('2015-11-20')}||' '||DATENAME('dw','2015-11-20') AS ODBCDoW,
       {fn DAYOFWEEK(63876)}||' '||DATENAME('dw','63876') AS HorologDoW

以下の例では、すべての選択項目が今日の曜日に対応する整数を返します。

SELECT {fn DAYOFWEEK({fn NOW()})} AS DoW_Now,
       {fn DAYOFWEEK(CURRENT_DATE)} AS DoW_CurrDate,
       {fn DAYOFWEEK(CURRENT_TIMESTAMP)} AS DoW_CurrTstamp,
       {fn DAYOFWEEK($ZTIMESTAMP)} AS DoW_ZTstamp,
       {fn DAYOFWEEK($HOROLOG)} AS DoW_Horolog

$ZTIMESTAMP は協定世界時 (UTC) を返すことに注意してください。その他の time-expression 値はローカル時刻を返します。これは、DAYOFWEEK 値に影響することがあります。

以下の組み込み SQL の例は、ネームスペースの週の最初の曜日を変更する方法を示しています。まずシステム全体の週の最初の曜日を設定し (7)、次にネームスペースの週の最初の曜日を設定します (3)。その後システム全体の週の最初の曜日を変更しても (2)、プログラムによってネームスペース固有の設定が削除されるまで、ネームスペースの週の最初の曜日には反映されません。ネームスペース固有の設定を削除すると、ネームスペースの週の最初の曜日が直ちに現在のシステム全体の値にリセットされます。最後に、プログラムによって最初のシステム全体の設定がリストアされます。

Note:

以下のプログラムは、SAMPLES または USER のネームスペース固有の週の最初の曜日の設定が存在するかどうかをテストします。存在する場合、このプログラムは処理を中止し、これらの設定の変更を回避します。

SetUp
  SET TestNsp="SAMPLES"
  SET ControlNsp="USER"
InitialDoWValues
  WRITE "Systemwide default DoW initial values",!
  DO TestDayofWeek()
  IF a=b {WRITE "No namespace-specific DoW defaults",!!}
  ELSE {WRITE "DoW initial settings are namespace-specific",!
        WRITE "Stopping this program"
        QUIT }
  SET initialDoW=^%SYS("sql","sys","day of week")
SetSystemwideDoW
  KILL ^%SYS("sql","sys","day of week",TestNsp)
  KILL ^%SYS("sql","sys","day of week",ControlNsp)
  SET ^%SYS("sql","sys","day of week")=7
  WRITE "Systemwide DoW set",!
  DO TestDayofWeek()
SetNamespaceDoW
  SET ^%SYS("sql","sys","day of week",TestNsp)=3
  WRITE TestNsp," namespace DoW set",!
  &sql(SELECT {fn DAYOFWEEK($HOROLOG)} INTO :a)
  DO TestDayofWeek()
ResetSystemwideDoW
  SET ^%SYS("sql","sys","day of week")=2
  WRITE "Systemwide DoW set with ",TestNsp," DoW set",!
  DO TestDayofWeek
KillNamespaceDoW
  KILL ^%SYS("sql","sys","day of week",TestNsp)
  WRITE "Namespace ",TestNsp," DoW killed",!
  DO TestDayofWeek
ResetSystemwideDoWDefault
  SET ^%SYS("sql","sys","day of week")=initialDoW
  WRITE "Systemwide DoW reset after ",TestNsp," DoW killed",!
  DO TestDayofWeek
TestDayofWeek()
  ZNSPACE TestNsp
  &sql(SELECT {fn DAYOFWEEK($HOROLOG)} INTO :a)
  WRITE "Today is the ",a," day of week in ",$NAMESPACE,!
  ZNSPACE ControlNsp
  &sql(SELECT {fn DAYOFWEEK($HOROLOG)} INTO :b)
  WRITE "Today is the ",b," day of week in ",$NAMESPACE,!!
  RETURN

以下の埋め込み SQL の例は、既定の曜日と、ISO 8601 標準が適用された場合の曜日を表示します。この例では、Caché の day of week が未設定であるか既定値に設定されていると想定しています。

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 DayofWeek }
UnsetISO
  SET ^%SYS("sql","sys","week ISO8601")=0
DayofWeek
  &sql(SELECT {fn DAYOFWEEK($HOROLOG)} INTO :a)
  WRITE "Today:",!
  WRITE "default day of week is ",a,!
  SET ^%SYS("sql","sys","week ISO8601")=1
  &sql(SELECT {fn DAYOFWEEK($HOROLOG)} INTO :b)
  WRITE "ISO8601 day of week is ",b,!
ResetISO
  SET ^%SYS("sql","sys","week ISO8601")=isoval

関連項目

FeedbackOpens in a new tab