1. ホーム
  2. データベース
  3. デービーツー

DB2 日付・時刻関数のアプリケーションノート

2022-01-22 05:08:51
DAYNAMEは、引数の曜日の部分(例えば、金曜日)を曜日とする大文字と小文字の混在した文字列を返します。
DAYOFWEEK は、引数の曜日を、1~7 の範囲の整数値で返します(1 は日曜日)。
DAYOFWEEK_ISO は、パラメータ中の曜日を 1-7 の範囲の整数値で返します(1 は月曜日)。
DAYOFYEAR は、1 から 366 までの範囲の整数値で表される、その年の曜日をパラメータで返します。
DAYS は、日付の整数表現を返します。
JULIAN_DAY関数は、紀元前4712年1月1日(ユリウス暦の開始日)からパラメータで指定した日付値までの日数を、整数値で返します。
MIDNIGHT_SECONDS は、午前0時からパラメータで指定した時刻までの秒数を、0から86400の範囲の整数値で返します。
MONTHNAME パラメータの月部分(例:1月)を大文字と小文字の混在した文字列で返します。
TIMESTAMP_ISO 日付、時刻、timestamp パラメータをもとにしたタイムスタンプ値を返します。
TIMESTAMP_FORMAT は、文字テンプレートを使用して解釈された文字列からタイムスタンプを返します。
TIMESTAMPDIFF 2つのタイムスタンプの時間差から、第1パラメータで定義された型式で表現される推定時間差を返す。
TO_CHARは、文字テンプレートでフォーマットされたタイムスタンプの文字表現を返します。
TO_DATE は、文字テンプレートを使って解釈された文字列からタイムスタンプを返します。TO_DATEはTIMESTAMP_FORMATと同義語です。
WEEK は、パラメータに指定された年の週を、1-54 の範囲の整数値で返します。週は日曜日から始まります。
WEEK_ISO は、引数の年の週を、1-53 の範囲の整数値で返します。
現在時刻または現在タイムスタンプをGMT/CUTに合わせるには、現在のタイムゾーン登録から現在時刻またはタイムスタンプを差し引きます。
現在時刻 - 現在のタイムゾーン
現在のタイムスタンプ - 現在のタイムゾーン
日付、時刻、タイムスタンプがある場合、適切な関数を使用して、年、月、日、時、分、秒、マイクロ秒のコンポーネントを個別に抽出することができます(該当する場合)。
YEAR (現在のタイムスタンプ)
MONTH (現在のタイムスタンプ)
DAY (現在のタイムスタンプ)
HOUR (現在のタイムスタンプ)
MINUTE (現在のタイムスタンプ)
SECOND (現在のタイムスタンプ)
マイクロ秒(現在のタイムスタンプ)
言葉は悪いですが、英語を使って日付や時刻の計算を行うこともできます。
現在の日付+1年
現在の日付+3年+2ヶ月+15日
現在時刻 + 5時間 - 3分 + 10秒
タイムスタンプから日付と時刻を別々に抽出するのも、非常に簡単です。
DATE (現在のタイムスタンプ)
TIME (現在のタイムスタンプ)
また、次の例では、マイクロ秒の部分をゼロにして、現在のタイムスタンプを取得する方法を説明します。
CURRENT TIMESTAMP - MICROSECONDS(現在のタイムスタンプ) MICROSECONDS
日付や時刻の値を他のテキストと連結したい場合は、まず値を文字列に変換する必要があります。これを行うには、単にCHAR()関数を使用します。
char(現在の日付)
char(現在時刻)
char(現在の日付+12時間)
文字列を日付や時刻の値に変換するには、次のようにします。
TIMESTAMP ('2002-10-20-12.00.00.000000')
タイムスタンプ('2002-10-20 12:00:00')
日付 ('2002-10-20')
日付('10/20/2002')
時間('12:00:00')
時間('12.00.00')
TIMESTAMP()、DATE()、TIME()関数は、さらに多くの形式を受け付けます。上記のフォーマットはあくまで例であり、読者が自分で他のフォーマットを発見できるような練習として使用します。
時には、2つのタイムスタンプ間の時間差を知る必要があります。これを行うために、DB2 は TIMESTAMPDIFF() という組み込み関数を提供しています。しかし、この関数はうるう年を考慮せず、また各月に30日しかないと仮定しているため、おおよその値を返します。次の例では、2 つの日付の時差の近似値を取得する方法について説明します。
timestampdiff (<n>, char())
timestamp('2002-11-30-00.00.00') -
timestamp('2002-11-08-00.00.00')))
また、<n>の場合、結果の時間単位を示すために、以下の各値を代わりに使用することができる。
1 = 1秒の10進数
2 = 秒
4 = 分
8 = 時間
16 = 日
32 = 週
64 = 月
128 = 四半期
256=年
日付が近いときに timestampdiff() を使用すると、日付が大きく異なるときよりも正確です。より正確な計算が必要な場合は、以下の方法で時差 (秒単位) を求めることができます。
(DAYS(t1) - DAYS(t2)) * 86400 +
(MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2))
また,便宜上,上記のメソッドに対応したSQLユーザー定義関数を作成することもできます.
CREATE FUNCTION secondsdiff(t1 TIMESTAMP, t2 TIMESTAMP)
RETURNS INT
RETURN (
(DAYS(t1) - DAYS(t2)) になります。* 86400 +
(MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2))
)
@
ある年がうるう年かどうかを判断する必要がある場合、次のような便利なSQL関数を作成して、ある年の日数を判断することができます。
CREATE FUNCTION daysinyear(yr INT)
RETURNS INT
RETURN (CASE (mod(yr, 400))) when 0 then 366 else
CASE (mod(yr, 4)) WHEN 0 THEN
CASE (mod(yr, 100)) when 0 then 365 else 366 end
ELSE 365 END
END)@。
最後に、日付操作のための組み込み関数の一覧を示します。これは、あなたの要求を満たすかもしれない関数を素早く特定することを目的としていますが、完全なリファレンスを提供するものではありません。これらの関数の詳細については、『SQL Reference Book』を参照してください。
SQL 日付・時刻関数
DAYNAME は、大文字と小文字が混在した文字列を返します。引数の曜日部分については、曜日を使用して曜日名を示します(たとえば、金曜日)。
DAYOFWEEK は、パラメータに指定された曜日を、1~7 の範囲の整数値で返します(1 は日曜日)。
DAYOFWEEK_ISO は、パラメータ中の曜日を 1 から 7 までの範囲の整数値で返します。
DAYOFYEAR は、1 から 366 までの範囲の整数値で表される、その年の曜日をパラメータで返します。
DAYS は、日付の整数表現を返します。
JULIAN_DAY関数は、紀元前4712年1月1日(ユリウス暦の開始日)からパラメータで指定した日付値までの日数を、整数値で返します。
MIDNIGHT_SECONDS は、午前0時からパラメータで指定した時刻までの秒数を、0から86400の範囲の整数値で返します。
MONTHNAME パラメータの月部分(例:1月)を大文字と小文字の混在した文字列で返します。
TIMESTAMP_ISO 日付、時刻、timestamp パラメータをもとにしたタイムスタンプ値を返します。
TIMESTAMP_FORMAT は、文字テンプレートを使用して解釈された文字列からタイムスタンプを返します。
TIMESTAMPDIFF 2つのタイムスタンプの時間差から、第1パラメータで定義された型式で表現される推定時間差を返す。
TO_CHARは、文字テンプレートでフォーマットされたタイムスタンプの文字表現を返します。
TO_DATE は、文字テンプレートを使って解釈された文字列からタイムスタンプを返します。TO_DATEはTIMESTAMP_FORMATと同義語です。
WEEK は、パラメータに指定された年の週を、1-54 の範囲の整数値で返します。週は日曜日から始まります。
WEEK_ISO は、パラメータに指定された年の週を 1-53 の範囲の整数値で返します。