PostgreSQLでよく使われる日時スクリプトは教程を使用します。
4131 ワード
システム時間関数を取得
--インターバルを使う
--extract extract(interval、timestamp)を使用する;
1.現在時刻/日付/タイムスタンプ
現在の時間を取得する方法は様々です。その前に次の2つのタイプの違いを知る必要があります。
常に現在の値を返します。timestamp()
常に現在の値を返しますが、トランザクションでは、トランザクションの開始時間(now()が返されます。
次の例を見ましょう。
2.時間帯:例えば3日前
intervalオペレータを使って、簡単に時間間隔を構築できます。例えば、
与えられた時間については、この日が何曜日か、あるいはそれがその世紀のものか、あるいはそれが一年の中の何日目かを知りたいだけです。PostgreSQLにおけるextract()関数はこの機能を提供する。
以下の例は8月26日月曜日にテストを行います。
時によっては、タイムゾーン変換は、特定の時間に対して異なるタイムゾーンで表示されるために特に有用である。AT TIME ZONEはこの機能を提供していますが、どうやってできますか?同じ事務においてnow()関数は常に同じ値を返すので、同じ時間に異なる時間帯で表示される違いを容易に見ることができるということを、一つの事務で実証します。
select now(); --2013-11-28 16:20:25.259715+08
select current_timestamp; --2013-11-28 16:20:38.815466+08
select current_date; --2013-11-28
select current_time; --16:21:08.981171+08
時間の計算--インターバルを使う
select now()+interval '2 day'; --2013-11-30 16:21:47.610118+08 2
select now()-interval '2 day'; --2013-11-26 16:22:03.390593+08 2
select now()+interval '2 hour'; --2013-11-28 18:22:14.578733+08 2
--intervalは書かなくてもいいです。その値は
-- Abbreviation Meaning
-- Y Years
-- M Months (in the date part)
-- W Weeks
-- D Days
-- H Hours
-- M Minutes (in the time part)
時間の切り取り --extract extract(interval、timestamp)を使用する;
select extract(year from now()); --2013
select extract(mon from now()); --5
時間の切り替え
select timestamp '2012-05-12 18:54:54'; --2012-05-12 18:54:54
select date '2012-05-12 18:54:54'; --2012-05-12
select time '2012-05-12 18:54:54'; --18:54:54
select TIMESTAMP WITH TIME ZONE '2012-05-12 18:54:54' --2012-05-12 18:54:54+08
unixタイムスタンプとの切り替え
SELECT TIMESTAMP 'epoch' + 1341174767 * INTERVAL '1 second';
--2012-07-01 20:32:47
実例1.現在時刻/日付/タイムスタンプ
現在の時間を取得する方法は様々です。その前に次の2つのタイプの違いを知る必要があります。
常に現在の値を返します。timestamp()
常に現在の値を返しますが、トランザクションでは、トランザクションの開始時間(now()が返されます。
次の例を見ましょう。
postgres=# BEGIN;
postgres=# SELECT now();
now
-------------------------------
2013-08-26 12:17:43.182331+02
postgres=# SELECT now();
now
-------------------------------
2013-08-26 12:17:43.182331+02
postgres=# SELECT clock_timestamp();
clock_timestamp
-------------------------------
2013-08-26 12:17:50.698413+02
postgres=# SELECT clock_timestamp();
clock_timestamp
-------------------------------
2013-08-26 12:17:51.123905+02
文の実行時にclock_を発見します。timestamp()の戻り値は毎回変わりますが、now()はいつも同じ値を返します。タイムゾーンを考慮する必要があるとき、この二つの関数の違いに特に注意しなければなりません。2.時間帯:例えば3日前
intervalオペレータを使って、簡単に時間間隔を構築できます。例えば、
interval '1 day'
interval '5 days'
interval '5 days' + interval '3 hours'
interval '5 days 3 hours'
例えば3日前のような時間間隔を構築するのに特に適した数学演算を簡単に行うために、インタバル演算子を使用することができます。
postgres=# SELECT now() - interval '3 days';
?column?
-------------------------------
2013-08-23 12:23:40.069717+02
3.何曜日を取得しますか与えられた時間については、この日が何曜日か、あるいはそれがその世紀のものか、あるいはそれが一年の中の何日目かを知りたいだけです。PostgreSQLにおけるextract()関数はこの機能を提供する。
以下の例は8月26日月曜日にテストを行います。
postgres=# SELECT extract(DAY FROM now());
date_part
-----------
26
postgres=# SELECT extract(DOW FROM now());
date_part
-----------
1
4.タイムゾーン変換時によっては、タイムゾーン変換は、特定の時間に対して異なるタイムゾーンで表示されるために特に有用である。AT TIME ZONEはこの機能を提供していますが、どうやってできますか?同じ事務においてnow()関数は常に同じ値を返すので、同じ時間に異なる時間帯で表示される違いを容易に見ることができるということを、一つの事務で実証します。
postgres=# BEGIN;
BEGIN
postgres=# SELECT now();
now
-------------------------------
2013-08-26 12:39:39.122218+02
postgres=# SELECT now() AT TIME ZONE 'GMT';
timezone
----------------------------
2013-08-26 10:39:39.122218
postgres=# SELECT now() AT TIME ZONE 'GMT+1';
timezone
----------------------------
2013-08-26 09:39:39.122218
postgres=# SELECT now() AT TIME ZONE 'PST';
timezone
----------------------------
2013-08-26 02:39:39.122218