ここでは、DATESTYLEとTIMEZONEという2つのパラメータを扱う。
パラメータとはセッション中(ログインしている間)で使用できる変数のようなもの。
パラメータの設定はSET、表示はSHOWを使用する。
SET パラメータ名 TO 値; SHOW パラメータ名;
SHOW ALLとすると全てのパラメータを表示できる。
型 | 内容 |
---|---|
DATE | 日付 |
TIME[ WITHOUT TIME ZONE] | 時刻(タイムゾーンなし) |
TIME WITH TIME ZONE | 時刻(タイムゾーンあり) |
TIMESTAMP[ WITHOUT TIME ZONE] | 日時(タイムゾーンなし) |
TIMESTAMP WITH TIME ZONE | 日時(タイムゾーンあり) |
タイムゾーンとは協定世界時からどのくらいの差があるかを示す値である。
国や地域ごとに決まっている。
DATESTYLEは日付の入力と出力の形式を制御するパラメータ。
カンマ(,)の前が出力、後ろが入力の形式を制御する。
ここでは、主に入力形式を確認する。
oddtbs=> show datestyle; ISO, YMD ※ YMDとは入力形式があいまいな場合、年月日の順で解釈することを意味する。 oddtbs=> select '09-10-14'::date; 2009-10-14 ※ 2009年10月14日と解釈された。 oddtbs=> set datestyle to iso, mdy; SET ※ 入力形式をMDYに変更。 oddtbs=> select '09-10-14'::date; 2014-09-10 ※ 2014年9月10日と解釈された。 oddtbs=> select '2009-10-13'::date; 2009-10-13 ※ 曖昧さがない場合はその通りに解釈する。 oddtbs=> set datestyle to default; SET ※ DATESTYLEを元に戻した。 oddtbs=> show datestyle; ISO, YMD
現在(今日)の日付を取得する。
oddtbs=> select current_date;
2009-08-11
oddtbs=> select '16:30:20'::time; 16:30:20 oddtbs=> select '16:30:20'::time with time zone; 16:30:20+09 +09がタイムゾーンであり協定世界時より9時間進んでいることを意味する。
TIMEZONEはタイムゾーンを制御するパラメータ。
oddtbs=> show timezone; Asia/Tokyo 東京のタイムゾーンになっている。 oddtbs=> set timezone to 'US/Hawaii'; SET ハワイのタイムゾーンに設定した。 oddtbs=> select '16:30:20'::time with time zone; 16:30:20-10 -10がタイムゾーンであり協定世界時より10時間遅れていることを意味する。 oddtbs=> set timezone to default; SET タイムゾーンを元に戻した。 oddtbs=> show timezone; Asia/Tokyo
現在時刻を取得する。
oddtbs=> select current_time; 21:41:01.921+09 oddtbs=> set timezone to 'US/Hawaii'; SET oddtbs=> select current_time; 02:41:46.64-10 oddtbs=> set timezone to default; SET oddtbs=> show timezone; Asia/Tokyo
oddtbs=> select '2009-10-13 16:30:20'::timestamp; 2009-10-13 16:30:20 oddtbs=> select '2009-10-13 16:30:20'::timestamp with time zone; 2009-10-13 16:30:20+09
現在日時を取得する。
oddtbs=> select current_timestamp; 2009-08-11 21:49:15.953+09 oddtbs=> set timezone to 'US/Hawaii'; SET oddtbs=> select current_timestamp; 2009-08-11 02:49:48.015-10 oddtbs=> set timezone to default; SET oddtbs=> show timezone; Asia/Tokyo
日付・時刻・日時の比較に関しては、過去が小、未来が大と解釈して判断する。
oddtbs=> select '2009-10-13'::date > '2008-6-20'::date; t oddtbs=> select '2009-10-13 9:20:18'::timestamp > '2008-5-20 20:9:18'::timestamp; t oddtbs=> select '2009-10-13 9:20:18'::time > '2008-5-20 20:9:18'::time; f ※ TIMEでキャストすると日付が抜け落ちるので注意
日付 - 日付 = 整数
日付 +- 整数 = 日付
日時 - 日時 = 時間差
日時 += 時間差 = 日時
※ 時間差は具体的にはINTERVALという型
oddtbs=> select '2009-10-13'::date - '2008-6-20'::date; 480 oddtbs=> select '2009-10-13'::date - 480; 2008-06-20 oddtbs=> select '2009-10-13 9:20:18'::timestamp - '2008-6-20 20:9:18'::timestamp; 479 days 13:11:00 ※ これがINTERVAL型 oddtbs=> select '2009-10-13 9:20:18'::timestamp - '479 days 13:11:00'::interval; 2008-06-20 20:09:18 oddtbs=> select age('2009-10-13 9:20:18'::timestamp, '2008-6-20 20:9:18'::timestamp); 1 year 3 mons 22 days 13:11:00 ※ AGE関数は基本的に引き算と同じだが、結果が年月日の形式となる。
日付・時刻・日時の一部の数値を取得する。
EXTRACT(フィールド名 FROM 日付・時刻・日時)
フィールド名 | 意味 |
---|---|
year | 年 |
month | 月 |
day | 日 |
dow | 曜日(日曜が0) |
hour | 時 |
minute | 分 |
second | 秒 |
oddtbs=> select extract(year from '2009-10-13 9:20:18'::timestamp); 2009 oddtbs=> select extract(minute from '2009-10-13 9:20:18'::timestamp); 20 oddtbs=> select extract(month from '1 year 3 mons 22 days'::interval); 3 oddtbs=> select extract(year from age(current_timestamp, '1976-10-13'::timestamp)); 32