PostgreSQL-DATE / TIME関数と演算子
私たちは、章の日付/時刻データ型について議論していたデータ型。それでは、日付/時刻の演算子と関数を見てみましょう。
次の表に、基本的な算術演算子の動作を示します。
オペレーター | 例 | 結果 |
---|---|---|
+ | 日付「2001-09-28」+整数「7」 | 日付「2001-10-05」 |
+ | 日付「2001-09-28」+間隔「1時間」 | タイムスタンプ '2001-09-28 01:00:00' |
+ | 日付「2001-09-28」+時間「03:00」 | タイムスタンプ '2001-09-28 03:00:00' |
+ | 間隔「1日」+間隔「1時間」 | 間隔「1日01:00:00」 |
+ | タイムスタンプ '2001-09-28 01:00' +間隔'23時間 ' | タイムスタンプ '2001-09-29 00:00:00' |
+ | 時間「01:00」+間隔「3時間」 | 時間'04:00:00 ' |
- | -間隔「23時間」 | 間隔 '-23:00:00' |
- | 日付「2001-10-01」-日付「2001-09-28」 | 整数「3」(日) |
- | 日付「2001-10-01」-整数「7」 | 日付「2001-09-24」 |
- | 日付「2001-09-28」-間隔「1時間」 | タイムスタンプ '2001-09-27 23:00:00' |
- | 時間「05:00」-時間「03:00」 | 間隔「02:00:00」 |
- | 時間「05:00」-間隔「2時間」 | 時間'03:00:00 ' |
- | タイムスタンプ '2001-09-2823:00'-間隔'23時間' | タイムスタンプ '2001-09-28 00:00:00' |
- | 間隔「1日」-間隔「1時間」 | 間隔「1日-01:00:00」 |
- | タイムスタンプ '2001-09-2903:00'-タイムスタンプ' 2001-09-27 12:00 ' | 間隔「1日15:00:00」 |
* | 900 *間隔「1秒」 | 間隔「00:15:00」 |
* | 21 *間隔「1日」 | 間隔「21日」 |
* | 倍精度「3.5」*間隔「1時間」 | 間隔「03:30:00」 |
/ | 間隔「1時間」/倍精度「1.5」 | 間隔「00:40:00」 |
以下は、利用可能なすべての重要な日付と時刻に関連する機能のリストです。
S.いいえ。 | 機能と説明 |
---|---|
1 | 年齢() 引数を引く |
2 | 現在の日付/時刻() 現在の日時 |
3 | DATE_PART() サブフィールドを取得する(抽出に相当) |
4 | エキス() サブフィールドを取得 |
5 | ISFINITE() 有限の日付、時刻、間隔をテストします(+/-無限大ではありません) |
6 | 正当化する 間隔を調整する |
AGE(タイムスタンプ、タイムスタンプ)、AGE(タイムスタンプ)
S.いいえ。 | 機能と説明 |
---|---|
1 | AGE(timestamp, timestamp) 2番目の引数のTIMESTAMP形式で呼び出されると、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
現在の日付/時刻()
PostgreSQLは、現在の日付と時刻に関連する値を返す多くの関数を提供します。以下はいくつかの機能です-
S.いいえ。 | 機能と説明 |
---|---|
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.いいえ。 | 機能と説明 |
---|---|
1 | transaction_timestamp() これはCURRENT_TIMESTAMPと同等ですが、返される内容を明確に反映するように名前が付けられています。 |
2 | statement_timestamp() 現在のステートメントの開始時刻を返します。 |
3 | clock_timestamp() 実際の現在時刻を返すため、1つのSQLコマンド内でも値が変化します。 |
4 | timeofday() 実際の現在の時刻を返しますが、タイムゾーン値のタイムスタンプではなく、フォーマットされたテキスト文字列として返します。 |
5 | now() これは、transaction_timestamp()と同等の従来のPostgreSQLです。 |
DATE_PART(テキスト、タイムスタンプ)、DATE_PART(テキスト、間隔)、DATE_TRUNC(テキスト、タイムスタンプ)
S.いいえ。 | 機能と説明 |
---|---|
1 | DATE_PART('field', source) これらの関数はサブフィールドを取得します。フィールドのパラメータは文字列値ではなく名前である必要があります。 有効なフィールド名は、century、day、decade、dow、doy、epoch、hour、isodow、isoyear、microseconds、millennium、milses、minute、month、quarter、second、timezone、timezone_hour、timezone_minute、week、yearです。 |
2 | DATE_TRUNC('field', source) この関数は、概念的には数値の切り捨て関数に似ています。sourceは、timestamp型またはinterval型の値式です。フィールドは、入力値を切り捨てる精度を選択します。戻り値のタイプはtimestampまたはintervalです。 有効な値のフィールドは以下のとおりです。マイクロ秒、ミリ秒、秒、分、時間、日、週、月、四半期、年、十年、世紀、千年紀 |
以下は、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)
EXTRACT(タイムスタンプからのフィールド)、EXTRACT(間隔からのフィールド)
ザ・ EXTRACT(field FROM source)関数は、日付/時刻の値から年や時間などのサブフィールドを取得します。ソースは、型の値式でなければならないタイムスタンプ、時刻、または間隔。フィールドが選択どのフィールドが元の値から抽出することが識別子または文字列です。EXTRACT関数は、倍精度型の値を返します。
有効なフィールド名は次のとおりです(DATE_PART関数のフィールド名と同様):century、day、decade、dow、doy、epoch、hour、isodow、isoyear、microseconds、millennium、mismilles、minute、month、quarter、second、timezone、timezone_hour 、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)
ISFINITE(日付)、ISFINITE(タイムスタンプ)、ISFINITE(間隔)
S.いいえ。 | 機能と説明 |
---|---|
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)
JUSTIFY_DAYS(interval)、JUSTIFY_HOURS(interval)、JUSTIFY_INTERVAL(interval)
S.いいえ。 | 機能と説明 |
---|---|
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)