日付変数と時刻変数を使用した算術演算
ほとんどの日付変数と時刻変数は、特定の日付からの秒数または時間間隔として内部的に保管されるため、算術演算で使用できます。 日付と時刻を含む多くの操作は、 日付と時刻の関数を広範囲に収集することによって実行できます。
- 日付 は、1582 年 10 月 14 日の午前 0 時からの秒数を表す浮動小数点数です。 日付は、特定の時点を表し、その日付までの秒数として保管されます。 例えば、2007 年 10 月 28 日は 13,412,908,800 として保管されます。
- 日付には時刻 (深夜 12 時を過ぎた時間間隔) が含まれます。 時刻が指定されていない場合、00:00 と見なされ、日付は 86,400 (1 日の秒数) の偶数倍になります。
- 時間間隔 は、時間枠内の秒数を表す浮動小数点数です (例えば、時間、分、日など)。 例えば、 5.5 日を表す値は 475,200 で、時間間隔 14:08:17 を表す値は 50,897 です。
QYR、MOYR、およびWKYR変数は、四半期、月、および年の週のそれぞれの初日の午前 0 時として保管されます。 したがって、 1 Q 90、 1/90、および 1 WK 90 はすべて、1990 年 1 月 1 日 0:0:00 と同等です。WKDAY変数は 1 から 7 として保管され、MONTH変数は 1 から 12 として保管されます。
日付形式と時刻形式の両方の変数を使用して、ほぼすべての算術演算を実行できます。 もちろん、これらの操作のすべてが特に役立つわけではありません。 2 つの日付の間の日数は、一方の日付から他方の日付を減算することによって計算できますが、2 つの日付を加算しても、あまり意味のある結果は得られません。
デフォルトでは、計算した新しい数値変数は F 形式で表示されます。 時刻変数と日付変数を含む計算の場合、これはデフォルトの出力が秒数で表されることを意味します。 FORMATS (または PRINT
FORMATS) コマンドを使用して、計算変数に適切な形式を指定します。
例
DATA LIST FREE /Date1 Date2 (2ADATE10).
BEGIN DATA
6/20/2006 10/28/2006
END DATA.
COMPUTE DateDiff1=(Date2-Date1)/60/60/24.
COMPUTE DateDiff2=DATEDIFF(Date2,Date1, "days").
COMPUTE FutureDate1=Date2+(10*60*60*24).
COMPUTE FutureDate2=DATESUM(Date2, 10, "days").
FORMATS FutureDate1 FutureDate2 (ADATE10).
- 最初の 2 つの
COMPUTEコマンドは両方とも、2 つの日付の間の日数を計算します。 最初の 1 つでは、Date2-Date1は 2 つの日付の間の秒数を生成します。この秒数は、1 分の秒数、1 時間の分数、および 1 日の時間数で除算することによって、日数に変換されます。 2 番目の関数では、DATEDIFF関数を使用して同等の結果を取得しますが、日数で表された結果を生成するための算術式の代わりに、単に引数"days"を組み込みます。 - 2 番目の
COMPUTEコマンド・ペアは両方とも、 Date2から 10 日後の日付を計算します。 最初の 10 日間は、 Date2に追加する前に、10 日間を 10 日間の秒数に変換する必要があります。 2 番目の関数では、DATESUM関数の"days"引数がその変換を処理します。 FORMATSコマンドは、2 番目の 2 つのCOMPUTEコマンドの結果を日付として表示するために使用します。これは、デフォルトの形式が F で、結果が 1582 年 10 月 14 日以降の秒数として表示されるためです。
日時関数について詳しくは、 日時関数 を参照してください。
日付に基づく条件ステートメントおよびケース選択
条件ステートメントで日付を値として指定するには、いずれかのデータ集約関数を使用して日付値を表現します。 例:
***this works***.
SELECT IF datevar >= date.mdy(3,1,2006).
***the following do not work***.
SELECT IF datevar >= 3/1/2006. /*this will select dates >= 0.0015.
SELECT IF datevar >= "3/1/2006" /*this will generate an error.
詳しくは、トピック「 集約関数 」を参照してください。