ページの先頭行へ戻る
Symfoware Server V10.0.0 SQLリファレンス

2.5.4 日時値関数

機能

日時値関数は、日時型の値となる関数です。

関数

機能

CURRENT DATE値関数

現在の日付を返却します。

CURRENT TIME値関数

現在の時刻を返却します。

CURRENT TIMESTAMP値関数

現在の時刻印を返却します。

ROUND_DATE関数

日付を指定した日時フィールドで丸めます。

TRUNC_DATE関数

日付を指定した日時フィールドで切捨てます。

ADD_DATE関数

DATE型に、数値属性で表現した時間隔を加算した結果の日時を返却します。

LAST_DAY関数

当該月の最終日付を返却します。

CNV_DATE関数

指定された日付書式で記述された文字型データをDATE型に変換します。

記述形式

一般規則

CURRENT DATE値関数
  • CURRENT_DATEは、現在の日付を返します。

  • CURRENT DATE値関数のデータ型は、DATE型です。

CURRENT_DATE

CURRENT_DATE 
→結果はDATE'2007-04-10'になります。
  現在日付が西暦2007年4月10日の場合。
CURRENT TIME値関数
  • CURRENT_TIMEは、現在の時刻を返します。

  • CURRENT TIME値関数のデータ型は、TIME型です。

CURRENT_TIME

CURRENT_TIME 
→結果はTIME'15:58:57'になります。
  現在時刻が15時58分57秒の場合。
CURRENT TIMESTAMP値関数
  • CURRENT_TIMESTAMPは、現在の時刻印を返します。

  • CURRENT TIMESTAMP値関数のデータ型は、TIMESTAMP型です。

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP 
→結果はTIMESTAMP'2007-04-10 15:58:59'になります。
  現在日付が西暦2007年4月10日でかつ現在時刻が15時
  58分59秒の場合。
ROUND_DATE関数
  • ROUND_DATE関数は、日付を丸め単位で丸めます。

  • 日付は日時値式です。データ型はDATE型に代入可能でなければなりません。

  • 日付がNULLである場合は、ROUND_DATE関数の結果はNULLとなります。

  • ROUND_DATE関数の結果のデータ型はDATE型です。

  • 丸め単位は文字列型の値指定です。丸めを行う単位を指定します。丸め単位に指定できる値と、ROUND_DATE関数の結果は以下のようになります。

    丸め単位

    意味

    引数の日付

    結果

    YEAR

    年で丸め

    1月1日 ~ 6月30日
    7月1日 ~ 12月31日

    当年の1月1日
    翌年の1月1日

    JYEAR

    年度で丸め

    4月1日 ~ 9月30日
    10月1日 ~ 3月31日

    当年度の4月1日
    翌年度の4月1日

    MONTH

    月で丸め

    1日 ~ 15日
    16日 ~ 31日

    当月の1日
    翌月の1日

    HALF

    半期で丸め

    1月1日 ~ 3月31日
    4月1日 ~ 9月30日
    10月1日 ~ 12月31日

    当年の1月1日
    当年の7月1日
    翌年の1月1日

    JHALF

    年度の半期で丸め

    4月1日 ~ 6月30日
    7月1日 ~ 12月31日
    翌年1月1日 ~ 3月31日

    当年の4月1日
    当年の10月1日
    翌年の4月1日

    QUARTER

    四半期で丸め

    1月1日 ~ 2月15日
    2月16日 ~ 5月15日
    5月16日 ~ 8月15日
    8月16日 ~ 11月15日
    11月16日 ~ 12月31日

    当年の1月1日
    当年の4月1日
    当年の7月1日
    当年の10月1日
    翌年の1月1日

  • ROUND_DATE関数の各オペランドに動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。

    表2.29 動的パラメタ指定が指定された場合のDESCRIBE情報

    オペランド

    DESCRIBE情報

    日付

    DATE

    丸め位置

    CHAR(7)

ROUND_DATE関数

ROUND_DATE(DATE'2007-08-15','MONTH') →結果はDATE'2007-08-01'になります。
ROUND_DATE(DATE'2007-08-23','QUARTER') →結果はDATE'2007-10-01'になります。
TRUNC_DATE関数
  • TRUNC_DATE関数は、日付を切捨ての単位で切り捨てます。

  • 日付は日時値式です。データ型はDATE型に代入可能でなければなりません。

  • 日付がNULLである場合は、TRUNC_DATE関数の結果はNULLとなります。

  • TRUNC_DATE関数の結果のデータ型はDATE型です。

  • 切捨ての単位は文字列型の値指定です。切捨てを行う単位を指定します。切捨ての単位に指定できる値と、TRUNC_DATE関数の結果は以下のようになります。

    切捨ての単位

    意味

    引数の日付

    結果

    YEAR

    年で切捨て

    1月1日 ~ 12月31日

    当年の1月1日

    JYEAR

    年度で切捨て

    4月1日 ~ 3月31日

    当年度の4月1日

    MONTH

    月で切捨て

    1日 ~ 31日

    当月の1日

    HALF

    半期で切捨て

    1月1日 ~ 6月30日
    7月1日 ~ 12月31日

    当年の1月1日
    当年の7月1日

    JHALF

    年度の半期で切捨て

    4月1日 ~ 9月30日
    10月1日 ~ 12月31日
    翌年1月1日 ~3月31日

    当年の4月1日
    当年の10月1日
    当年の10月1日

    QUARTER

    四半期で切捨て

    1月1日 ~ 3月31日
    4月1日 ~ 6月30日
    7月1日 ~ 9月30日
    10月1日 ~ 12月31日

    当年の1月1日
    当年の4月1日
    当年の7月1日
    当年の10月1日

  • TRUNC_DATE関数の各オペランドに動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。

    表2.30 動的パラメタ指定が指定された場合のDESCRIBE情報

    オペランド

    DESCRIBE情報

    日付

    DATE

    切捨て単位

    CHAR(7)

TRUNC_DATE関数

TRUNC_DATE(DATE'2007-08-22','YEAR') →結果はDATE'2007-01-01'になります。
TRUNC_DATE(DATE'2007-02-15','JHALF') →結果はDATE'2006-10-01'になります。
ADD_DATE関数
  • ADD_DATE関数は、日付に指定した加算数を指定した時間隔の単位として日付に加算した結果の日時を返却します。

  • 日付のデータ型はDATE型に代入可能でなければなりません。

  • 加算数は数値式です。INTEGER型に変換されます。

  • ADD_DATE関数の結果のデータ型は、DATE型です。

  • 日付または加算数がNULL値である場合、ADD_DATE関数の結果はNULLとなります。

  • 加算数が負の値の場合、日付から加算数の絶対値を時間隔の単位として減算します。減算により、1年より小さくなった場合はエラーとなります。

  • 月数の加算により、暦上存在しない日付になった場合は、日フィールドの値をその月の最終日に補正します。

  • 時間隔の単位は文字列型の値指定です。指定できる文字列と意味を以下に示します。

    時間隔の単位

    意味

    YEAR

    加算数を年数として加算します。

    MONTH

    加算数を月数として加算します。

    DAY

    加算数を日数として加算します。

  • ADD_DATE関数の各オペランドに動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。

    表2.31 動的パラメタ指定が指定された場合のDESCRIBE情報

    オペランド

    DESCRIBE情報

    日付

    DATE

    加算数

    INTEGER

    時間隔の単位

    CHAR(5)

ADD_DATE関数

ADD_DATE(DATE'2006-08-28',6,'MONTH') →結果はDATE'2007-02-28'になります。
ADD_DATE(DATE'2007-08-31',1,'MONTH') →結果はDATE'2007-09-30'になります。
ADD_DATE(DATE'2007-08-28',-2,'DAY') →結果はDATE'2007-08-26'になります。
LAST_DAY関数
  • LAST_DAY関数は、日付で指定した月の最終日付を返します。

  • 日付は日時値式です。DATE型に代入可能でなければなりません。

  • LAST_DAY関数の結果のデータ型はDATE型です。

  • 日付がNULLの場合、LAST_DAY関数の実行結果はNULLとなります。

  • LAST_DAY関数の各オペランドに動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。

    表2.32 動的パラメタ指定が指定された場合のDESCRIBE情報

    オペランド

    DESCRIBE情報

    日付

    DATE

LAST_DAY関数

LAST_DAY(DATE'2007-06-01') →結果はDATE'2007-06-30'になります。
CNV_DATE関数
  • CNV_DATE関数は、変換元の文字値式を日付書式に従ってDATE型に変換します。

  • 変換元は文字値式です。データ型は文字列型で、その書式は日付書式と一致していなければなりません。月や日など、先行する0は省略できません。

  • 日付書式は値指定です。変換元の書式を表す文字列を指定します。

  • 日付書式を省略すると、デフォルトの日付書式が選択されたと見なします。デフォルトの日付書式は、“YYYY-MM-DD”です。

  • 変換元がNULLである場合は、CNV_DATE関数の結果はNULLとなります。

  • 日付書式がNULLである場合は、CNV_DATE関数の結果はNULLとなります。

  • CNV_DATE関数の結果のデータ型はDATE型です。

  • 日付書式に月や日を表す文字列を指定しなかった場合、CNV_DATE関数は書式要素の組合せに応じて、ある期間の最終日を返します。詳細は“CNV_DATE関数に指定可能な書式要素の組合せ”の備考を参照してください。

  • 日付書式には、書式要素の組合せを任意の順序で指定できます。また書式要素は任意のセパレータで区切って指定することができます。ただし、同じ書式要素を2度以上指定した場合やセパレータを2文字以上連続して記述することはできません。詳細は、“日付書式”、“CNV_DATE関数に指定可能な書式要素の組合せ”、“セパレータ”を参照してください。

  • CNV_DATE関数の各オペランドに動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。

    表2.33 動的パラメタ指定が指定された場合のDESCRIBE情報

    オペランド

    DESCRIBE情報

    変換元

    CHAR(10)

    日付書式

    CHAR(10)

CNV_DATE関数

CNV_DATE('Saturday APR 14,2007','DAY MON DD,YYYY')
→結果はDATE'2007-04-14'になります。
CNV_DATE('20070414','YYYYMMDD')
→結果はDATE'2007-04-14'になります。
CNV_DATE('2007-03-10','YYYJ-MM-DD')
→結果はDATE'2006-03-10'になります。
CNV_DATE('2007-04-14')
→結果はDATE'2007-04-14' になります。
CNV_DATE('2007','YYYY')
→結果はDATE'2007-12-31' になります。
CNV_DATE('Mondey 2007.04.23','DAY YYYY.MM.DD')
→結果はエラーになります。正しくはMondayです。
CNV_DATE('FRIJuly232007','DYMONTHDDYYYY')
→結果はDATE'2007-07-23'になります。
日付書式

DATE型は通常、「YYYY-MM-DD」のシステム標準書式で扱います。しかし、システム標準書式以外の書式でDATE型を扱いたいような場合があります。このような場合に「日付書式」を利用します。

日付書式は、日付を表現する際の文字列の書式です。この日付書式は、DATE型と文字型との間の変換関数の入力パラメタとして指定します。

書式要素を以下に示します。

書式要素

意味

YYYY

年(西暦: 1~9999) 年の開始日は1月1日
データの表現は4文字固定(0001~9999)

YYYJ

年度(西暦: 1~9999) 年度の開始日は4月1日
データの表現は4文字固定(0001~9999)

MM

月(1~12)
データの表現は2文字固定(01~12)

MONTH

月の名称
(January,February,March,April,May,June,July,August,September,October,November,December)
データの表現は9文字固定。不足分には空白を埋める

MON

省略形の月の名前
(JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC)
データの表現は3文字固定

DD

日(1~31)
データの表現は2文字固定(01~31)

DAY

曜日(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday)
データの表現は9文字固定。不足分には空白を埋める

DY

省略形の曜日(SUN,MON,TUE,WED,THU,FRI,SAT)
データの表現は3文字固定

H

半期(1~2)データの表現は1文字固定
「YYYJ」と共に記述した場合
1: 4月1日 ~ 9月30日(上期)
2: 10月1日 ~ 3月31日(下期)
「YYYY」と共に記述した場合
1: 1月1日 ~ 6月30日(上期)
2: 7月1日 ~ 12月31日(下期)

Q

四半期(1~4)
データの表現は1文字固定
「YYYJ」と共に記述した場合
1: 4月1日 ~ 6月30日 (第1四半期)
2: 7月1日 ~ 9月30日 (第2四半期)
3: 10月1日 ~ 12月31日 (第3四半期)
4: 1月1日 ~ 3月31日 (第4四半期)
「YYYY」と共に記述した場合
1: 1月1日 ~ 3月31日 (第1四半期)
2: 4月1日 ~ 6月30日 (第2四半期)
3: 7月1日 ~ 9月30日 (第3四半期)
4: 10月1日 ~ 12月31日 (第4四半期)

CNV_DATE関数に指定可能な書式要素の組合せ

CNV_DATE関数には、指定可能な書式要素の組合せがあります。

指定可能な書式要素の組合せを以下に示します。

書式要素の組合せ

備考

YYYY, MM , DD ,[DAYまたはDY]

DAYまたはDYは省略可能です。

YYYJ, MM , DD ,[DAYまたはDY]

DAYまたはDYは省略可能です。

YYYY, MONTH, DD ,[DAYまたはDY]

DAYまたはDYは省略可能です。

YYYJ, MONTH, DD ,[DAYまたはDY]

DAYまたはDYは省略可能です。

YYYY, MON, DD ,[DAYまたはDY]

DAYまたはDYは省略可能です。

YYYJ, MON, DD ,[DAYまたはDY]

DAYまたはDYは省略可能です。

YYYY, MM

その月の最終日を返します。

YYYJ, MM

その年度月の最終日を返します。

YYYY, MONTH

その月の最終日を返します。

YYYJ, MONTH

その年度月の最終日を返します。

YYYY, MON

その月の最終日を返します。

YYYJ, MON

その年度月の最終日を返します。

YYYY, H

半期の最終日を返します。(6月30日か12月31日)

YYYJ, H

年度半期の最終日を返します。(3月31日か9月30日)

YYYY, Q

各四半期の最終日を返します。

YYYJ, Q

各四半期(年度)の最終日を返します。

YYYY

当年の最終日(12月31日)を返します。

YYYJ

当年度の最終日(3月31日)を返します。

セパレータ

セパレータには、以下の文字が指定できます。

セパレータ

文字

半角ブランク

  

ハイフン

スラッシュ

ピリオド

カンマ

コロン

注意事項

日付書式には、上記の書式要素を任意の順序で指定することができます。また書式要素を任意のセパレータで区切って指定することもできます。ただし、以下のような指定をした場合、エラーとなります。

  • 同じ書式要素を2度以上指定する。

    CNV_CHAR(DATE'2007-04-10','YYYY.MM.MM') →エラー
  • セパレータを2文字以上連続して記述する。

    CNV_DATE('2007-04-10','YYYY//MM///DD') →エラー
  • セパレータを日付書式の先頭、末尾に記述する。

    CNV_DATE('2007-04-10','YYYY/MM/DD/') →エラー
  • 書式要素にH、またはQを指定した場合、YYYYとYYYJを同時に指定することはできません。どちらか一方を指定してください。

    CNV_CHAR(DATE'2007-04-10','YYYY-YYYJ-H-Q') →エラー
  • CNV_DATE関数に、書式要素MONTH、MON、DAYおよびDYを指定する場合、変換元の文字列は、以下の文字列と完全に一致していなければいけません。大文字、小文字の違いでもエラーとなりますので注意が必要です。

    MONTH:January,February,March,April,May,June,July,August,September,October,November, December
    MON:JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC
    DAY:Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
    DY:SUN,MON,TUE,WED,THU,FRI,SAT
  • 書式要素DAYおよびDYを指定した場合、指定した日付と曜日が正しいかどうかの妥当性チェックは行いません。誤っていても曜日は無視して処理されます。

使用例

1

CURRENT DATE値関数(日別発注表にデータを1行追加します。処理日には現在の日付を設定します。)

INSERT INTO 在庫管理.日別発注表(取引先,取引製品,発注数量,処理日)
    VALUES(61,:PRODNO,:ORDERQTY,CURRENT_DATE)

2

CURRENT TIME値関数(日別発注表にデータを1行追加します。処理時間には現在の時間を設定します。)

INSERT INTO 在庫管理.日別発注表(取引先,取引製品,発注数量,処理時間)
    VALUES(61,:PRODNO,:ORDERQTY,CURRENT_TIME)

3

CURRENT TIMESTAMP値関数(日別発注表にデータを1行追加します。処理日時には現在の日時を設定します。)

INSERT INTO 在庫管理.日別発注表(取引先,取引製品,発注数量,処理日時)
    VALUES(61,:PRODNO,:ORDERQTY,CURRENT_TIMESTAMP)

4

ROUND_DATE関数(丸めた月ごとの売上金額の合計を求めます。)

SELECT 丸め月,SUM(売上金) FROM 売上表
    GROUP BY ROUND_DATE(販売日,'MONTH') AS 丸め月

5

TRUNC_DATE関数(四半期ごとの発注数量の平均を求めます。)

SELECT 四半期,AVG(発注数量) FROM 発注表
    GROUP BY TRUNC_DATE(発注日,'QUARTER') AS 四半期

6

ADD_DATE関数(発注日から1ヶ月以上経過している発注番号を求めます。)

SELECT 発注番号 FROM 発注表
    WHERE 納品日 IS NULL AND ADD_DATE(発注日,1,'MONTH') < CURRENT_DATE

7

LAST_DAY関数(発注日から月末までの日数を求めます。)

SELECT 発注番号,SPAN_DATE(発注日,LAST_DAY(発注日),'DAY')
    FROM 発注表 WHERE 納品日 IS NULL

8

CNV_DATE関数(最低気温日付文字表の日付文字:Sunday January 14,2007を日付に変換します。)

SELECT 地区コード , CNV_DATE(日付文字, 'DAY MONTH DD,YYYY')
    FROM 最低気温日付文字表