Postgresql-date-time
PostgreSQL-日付/時刻関数と演算子
章のリンク:/postgresql/postgresql_data_types [データ型]で、日付/時刻データ型について説明しました。 では、日付/時刻演算子と関数を見てみましょう。
次の表は、基本的な算術演算子の動作を示しています-
Operator | Example | Result |
---|---|---|
+ | date '2001-09-28' + integer '7' | date '2001-10-05' |
+ | date '2001-09-28' + interval '1 hour' | timestamp '2001-09-28 01:00:00' |
+ | date '2001-09-28' + time '03:00' | timestamp '2001-09-28 03:00:00' |
+ | interval '1 day' + interval '1 hour' | interval '1 day 01:00:00' |
+ | timestamp '2001-09-28 01:00' + interval '23 hours' | timestamp '2001-09-29 00:00:00' |
+ | time '01:00' + interval '3 hours' | time '04:00:00' |
- | - interval '23 hours' | interval '-23:00:00' |
- | date '2001-10-01' - date '2001-09-28' | integer '3' (days) |
- | date '2001-10-01' - integer '7' | date '2001-09-24' |
- | date '2001-09-28' - interval '1 hour' | timestamp '2001-09-27 23:00:00' |
- | time '05:00' - time '03:00' | interval '02:00:00' |
- | time '05:00' - interval '2 hours' | time '03:00:00' |
- | timestamp '2001-09-28 23:00' - interval '23 hours' | timestamp '2001-09-28 00:00:00' |
- | interval '1 day' - interval '1 hour' | interval '1 day -01:00:00' |
- | timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' | interval '1 day 15:00:00' |
* | 900* interval '1 second' | interval '00:15:00' |
* | 21* interval '1 day' | interval '21 days' |
* | double precision '3.5'* interval '1 hour' | interval '03:30:00' |
/ | interval '1 hour'/double precision '1.5' | interval '00:40:00' |
以下は、利用可能なすべての重要な日付と時刻の機能のリストです。
S. No. | Function & Description |
---|---|
1 |
引数を引く |
2 |
現在の日時 |
3 |
サブフィールドの取得(抽出と同等) |
4 |
サブフィールドを取得 |
5 |
有限の日付、時間、間隔(+/-無限ではない)をテストする |
6 |
間隔を調整する |
[function_age]#
AGE(タイムスタンプ、タイムスタンプ)、AGE(タイムスタンプ)
S. No. | Function & Description |
---|---|
1 |
AGE(timestamp, timestamp) TIMESTAMP形式の2番目の引数で呼び出された場合、AGE()は引数を減算し、年と月を使用し、INTERVAL型の「シンボリック」結果を生成します。 |
2 |
AGE(timestamp) TIMESTAMPのみを引数として呼び出した場合、AGE()はcurrent_dateから(真夜中に)減算します。 |
関数AGE(timestamp、timestamp)の例は-
testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');
上記のPostgreSQLステートメントは、次の結果を生成します-
age
-------------------------
43 years 9 mons 27 days
関数AGE(timestamp)の例は-
testdb=# select age(timestamp '1957-06-13');
上記のPostgreSQLステートメントは、次の結果を生成します-
age
--------------------------
55 years 10 mons 22 days
[function_currentdatetime]#
現在の日付/時刻()
PostgreSQLは、現在の日付と時刻に関連する値を返す多くの関数を提供します。 以下はいくつかの機能です-
S. No. | Function & Description |
---|---|
1 |
CURRENT_DATE 現在の日付を提供します。 |
2 |
CURRENT_TIME タイムゾーンで値を提供します。 |
3 |
CURRENT_TIMESTAMP タイムゾーンで値を提供します。 |
4 |
CURRENT_TIME(precision) オプションで精度パラメーターを使用します。これにより、結果は秒フィールドのその小数桁に丸められます。 |
5 |
CURRENT_TIMESTAMP(precision) オプションで精度パラメーターを使用します。これにより、結果は秒フィールドのその小数桁に丸められます。 |
6 |
LOCALTIME タイムゾーンなしで値を提供します。 |
7 |
LOCALTIMESTAMP タイムゾーンなしで値を提供します。 |
8 |
LOCALTIME(precision) オプションで精度パラメーターを使用します。これにより、結果は秒フィールドのその小数桁に丸められます。 |
9 |
LOCALTIMESTAMP(precision) オプションで精度パラメーターを使用します。これにより、結果は秒フィールドのその小数桁に丸められます。 |
上記の表の関数を使用した例-
testdb=# SELECT CURRENT_TIME;
timetz
--------------------
08:01:34.656+05:30
(1 row)
testdb=# SELECT CURRENT_DATE;
date
------------
2013-05-05
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP;
now
-------------------------------
2013-05-05 08:01:45.375+05:30
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP(2);
timestamptz
------------------------------
2013-05-05 08:01:50.89+05:30
(1 row)
testdb=# SELECT LOCALTIMESTAMP;
timestamp
------------------------
2013-05-05 08:01:55.75
(1 row)
PostgreSQLはまた、現在のステートメントの開始時刻と、その関数が呼び出された瞬間の実際の現在時刻を返す関数を提供します。 これらの機能は-
S. No. | Function & Description |
---|---|
1 |
transaction_timestamp() CURRENT_TIMESTAMPと同等ですが、返される内容を明確に反映するように名前が付けられています。 |
2 |
statement_timestamp() 現在のステートメントの開始時間を返します。 |
3 |
clock_timestamp() 実際の現在時刻を返すため、その値は単一のSQLコマンド内でも変化します。 |
4 |
timeofday() 実際の現在時刻を返しますが、タイムゾーン値を含むタイムスタンプではなく、フォーマットされたテキスト文字列として返されます。 |
5 |
now() これは、transaction_timestamp()と同等の従来のPostgreSQLです。 |
[function_datepart]#
DATE_PART(テキスト、タイムスタンプ)、DATE_PART(テキスト、間隔)、DATE_TRUNC(テキスト、タイムスタンプ)
S. No. | Function & Description |
---|---|
1 |
DATE_PART('field', source) これらの関数はサブフィールドを取得します。 _field_パラメータは、名前ではなく文字列値である必要があります。 有効なフィールド名は次のとおりです:century、day、decade、dow、doy、epoch、hour、isodow、isoyear、microseconds、millennium、ms、minute、month、quarter、second、timezone、timezone_hour、timezone_minute、week、year. |
2 |
DATE_TRUNC('field', source) この関数は、数値の_trunc_関数に概念的に似ています。 _source_は、タイプtimestampまたはintervalの値式です。 _field_は、入力値を切り捨てる精度を選択します。 戻り値のタイプは_timestamp_または_interval_です。 _field_の有効な値は次のとおりです。_マイクロ秒、ミリ秒、秒、分、時間、日、週、月、四半期、年、10年、世紀、千年 |
以下は、DATE_PART(_ 'field'_、source)関数の例です-
testdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
testdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
date_part
-----------
4
(1 row)
以下は、DATE_TRUNC(_ 'field'_、source)関数の例です-
testdb=# SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-02-16 20:00:00
(1 row)
testdb=# SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-01-01 00:00:00
(1 row)
[function_extract]#
EXTRACT(タイムスタンプからのフィールド)、EXTRACT(間隔からのフィールド)
- EXTRACT(field FROM source)*関数は、日付/時刻値から年や時間などのサブフィールドを取得します。 _source_は、タイプ_timestamp、time、またはinterval_の値式でなければなりません。 _field_は、ソース値から抽出するフィールドを選択する識別子または文字列です。 EXTRACT関数は、_double precision_型の値を返します。
有効なフィールド名は次のとおりです(DATE_PART関数のフィールド名と同様):世紀、日、10年、ダウ、ドイ、エポック、時間、アイソドウ、アイソイヤー、マイクロ秒、ミレニアム、ミリ秒、分、月、四半期、秒、タイムゾーン、タイムゾーン、時間ゾーン、timezone_minute、week、year。
以下は、EXTRACT(_ 'field'_、source)関数の例です-
testdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
date_part
-----------
20
(1 row)
testdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
[function_isfinite]#
ISFINITE(日付)、ISFINITE(タイムスタンプ)、ISFINITE(間隔)
S. No. | Function & Description |
---|---|
1 |
ISFINITE(date) 有限の日付のテスト。 |
2 |
ISFINITE(timestamp) 有限タイムスタンプのテスト。 |
3 |
ISFINITE(interval) 有限間隔のテスト。 |
以下は、ISFINITE()関数の例です-
testdb=# SELECT isfinite(date '2001-02-16');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(interval '4 hours');
isfinite
----------
t
(1 row)
[function_justify]#
JUSTIFY_DAYS(間隔)、JUSTIFY_HOURS(間隔)、JUSTIFY_INTERVAL(間隔)
S. No. | Function & Description |
---|---|
1 |
JUSTIFY_DAYS(interval) 30日間の期間が月として表されるように間隔を調整します。 interval タイプを返します |
2 |
JUSTIFY_HOURS(interval) 24時間の期間が日として表されるように間隔を調整します。 interval タイプを返します |
3 |
JUSTIFY_INTERVAL(interval) JUSTIFY_DAYSおよびJUSTIFY_HOURSを使用して間隔を調整し、さらに符号を調整します。 interval タイプを返します |
以下は、ISFINITE()関数の例です-
testdb=# SELECT justify_days(interval '35 days');
justify_days
--------------
1 mon 5 days
(1 row)
testdb=# SELECT justify_hours(interval '27 hours');
justify_hours
----------------
1 day 03:00:00
(1 row)
testdb=# SELECT justify_interval(interval '1 mon -1 hour');
justify_interval
------------------
29 days 23:00:00
(1 row)