日付/時刻関数

次の表では、日付/時刻関数について説明します。
表 1. 日付/時刻関数
タイプ 説明
add_months(date,n) 整数 n で示された月数を加えた、date に対応する日付を返します。 結果の日付が、結果の月に存在する日数よりも多い場合、その月の最終日が返されます。 それ以外では、返される日付のうちの日の部分は、date のものと同じになります。 例:
add_months('March 03, 2015',2) '2015-05-03 00:00:00'
add_months('March 31, 2015',-1)'2015-02-28 00:00:00'」を返す。
age(ts,ts)
age(ts)
2 つの timestamp 間のインターバルを返します。 返す値は、最も精度の高い引数と同じ精度になります。 例:
  • select age('10-22-2003', '7-6-2002') 戻り値 '1 year 3 mons 16 days'
  • select age('10-22-2003 09:46:07.325', '7-6-2002') 戻り値 '1 year 3 mons 16 days 09:46:07.325'
引数を 1 つだけ指定した場合は、指定したタイム・スタンプと現在時刻との間のインターバルがこの関数によって返されます。 これは「age(CURRENT_TIMESTAMP, ts)」と同じ意味である。

Netezza Performance ServerのSQL インターバルサポートは非標準です。

date_part(units,col) col に指定された日付/時刻値、インターバル、または期間から、units で表されたサブフィールドを抽出します。 この関数は extract() と等価です。
date_trunc(units,date) date に指定された日付を、units で指定された精度になるように切り捨てます。
extract(units FROM col) col に指定された日付/時刻値、インターバル、または期間から、units で表されたサブフィールドを抽出します。 この関数は date_part() と等価です。
last_day(date) 指定された日付の月の最終日を返します。
months_between(d1,d2) 日付 d1 と日付 d2 の間の月数を返します。
  • d1d2 より遅い日付の場合は正の値が返されます。
  • d1d2 より早い日付の場合は負の値が返されます。
  • d1d2 が、同じ月間通算日であるか、または両方とも月の末日である場合、結果は整数値となります。
  • それ以外の場合は、31 日の月に基づいた小数部分が結果に含められます。
例:
  • select months_between('2015-05-23', '2015-04-23') 戻り値 1
  • select months_between('2015-02-28', '2015-05-31') 戻り値 -3
  • select months_between('2015-05-15', '2014-05-05') は、12.322580645 を返します (まる 12 カ月に 10 日 (10/31=0.322580645) を加算)
next_day(date,weekday) 特定の日付の翌日にあたる週日を返します。 date 引数には、日付またはタイム・スタンプを指定できます。 戻り値のフォーマットは、date 引数のフォーマットと同じです。

weekday 引数は、曜日 ('SUN'、'MON'、'TUE'、'WED'、'THU'、'FRI'、'SAT') を示す 3 文字以上のストリング・リテラルで、この曜日の日付が返されます。 これは、単一引用符で囲む必要があり、大文字も小文字も使用できます。 3 番目の文字の後に指定された文字は、すべて無視されます。 例えば、以下のように、2013 年 12 月 25 日 (水曜日) の後の最初の土曜日は 2013 年 12 月 28 日となります。

select next_day('12-25-2013','Saturday') 戻り値 '2013-12-28'

now() この関数は current_timestamp と同等です。 詳細については、変換関数を参照してください。
overlaps(a,b,c,d) 2 つの時間間隔が重複しているかどうかを判別します。 以下のデータ型を使用できます。
  • パラメーター a および c には、TIME または TIMESTAMP のいずれかを使用できますが、両方に同じものを使用しなければなりません。
  • パラメーター b および d には、TIME、TIME WITH TIME ZONE、または INTERVAL のいずれかを使用できますが、両方に同じものを使用しなければなりません。
Netezza Performance ServerSQLは標準SQLのオーバーラップ述語をサポートしています。
duration_add(a,b) 2 つの引数 (ab が表す) を加算して得られる期間を返します。 引数のデータ型の有効な組み合わせは表2に記載されている。
duration_subtract(a,b) 第 1 引数 (a) から第 2 引数 (b) を引いた持続時間を返す。引数のデータ型の有効な組み合わせは表 3 に示す。
timeofday() current_timestamp 関数を詳細なストリングで記述したものであり、 例えば、Mon 01 Dec 2014 16:12:05 EST などです。 出力の形式は、使用する変換関数によって決まります(変換関数を参照)
timezone(timestamp from_tz to_tz) from_tz タイム・ゾーンの入力タイム・スタンプ値から、to_tz タイム・ゾーン値のタイム・スタンプに変換します。 例:
select TIMEZONE(timestamp '2000-07-04 17:00:00', 'America/New_York', 
'America/Los_Angeles');
      TIMEZONE
---------------------
 2000-07-04 14:00:00
(1 row)

システムは、ICU ライブラリーを使用することで、指定されたタイム・ゾーン値を検査して解決します。 Canada/NewfoundlandようなプログラムIDや、GMT-03:30ような生のオフセット値でタイムゾーンを確実に指定する方法については、http://userguide.icu-project.org/datetime/timezone。 この関数がクエリで指定されたタイムゾーンを解決できない場合、クエリは失敗し、次のメッセージが表示されますERROR: Time zone 'invalid_tz' not recognized.

表 2. duration_add 関数の引数で有効なデータ型の組み合わせ
1 番目の引数のデータ型 2 番目の引数のデータ型 戻り
日付 numeric(8,0) 日付
時間 numeric(6,0) 時間
タイム・スタンプ numeric(6,0) タイム・スタンプ
numeric(8,0)
numeric(14,0)
numeric(15,1)
numeric(16,2)
numeric(17,3)
numeric(18,4)
numeric(19,5)
numeric(20,6)
テーブル3。 duration_subtract 関数の引数で有効なデータ型の組み合わせ
1 番目の引数のデータ型 2 番目の引数のデータ型 戻り
日付 日付 numeric(8,0)
numeric(8,0) 日付
時間 時間 numeric(6,0)
numeric(6,0) 時間
タイム・スタンプ タイム・スタンプ numeric(20,6)
numeric(6,0) タイム・スタンプ
numeric(8,0)
numeric(14,0)
numeric(15,1)
numeric(16,2)
numeric(17,3)
numeric(18,4)
numeric(19,5)
numeric(20,6)
duration_add 関数および duration_subtract 関数の 2 番目の引数および戻り値について、以下に説明します。
  • numeric(6,0) 型は、hhmmss 形式の期間を表します。例えば、3 時間 7 分 45 秒の場合は 030745 となります。
  • numeric(8,0) 型は、YYYYMMDD 形式の期間を表します。例えば、2 年 5 カ月 25 日の場合は 00020525 となります。
  • 他の数値は、以下のように 14 から 20 桁で構成されます。
    • 最初の 8 桁は、YYYYMMDD の形式で期間の日付の部分を表します。
    • 次の 6 桁は、hhmmss の形式で期間の時間の部分を表します。
    • 次の 0 から 6 桁は、秒の小数部を表します。
    例えば、00010521010521999::numeric(17,3) という期間は、1 年 5 カ月 21 日 1 時間 5 分 21.999 秒の期間を表します。