本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
間隔資料類型和常值
您可以使用間隔資料類型來儲存下列單位的持續時間:seconds、minutes、hours、days、months 和 years。間隔資料類型和常值可用於日期時間計算,例如,將間隔新增至日期和時間戳記、加總間隔,以及從日期或時間戳記減去間隔。間隔常值可作為資料表中間隔資料類型欄的輸入值。
間隔資料類型的語法
若要指定間隔資料類型,以年和月為單位儲存持續時間:
INTERVAL year_to_month_qualifier
若要指定間隔資料類型,以天、小時、分鐘和秒為單位儲存持續時間:
INTERVAL day_to_second_qualifier [ (fractional_precision) ]
間隔常值的語法
若要指定間隔常值,以年和月為單位定義持續時間:
INTERVAL quoted-string year_to_month_qualifier
若要指定間隔常值,以天、小時、分鐘和秒為單位定義持續時間:
INTERVAL quoted-string day_to_second_qualifier [ (fractional_precision) ]
引數
- quoted-string
-
指定正或負數值,以將數量和日期時間單位指定為輸入字串。如果引號字串只包含數字,則 AWS Clean Rooms 會從 year_to_month_qualifier 或 day_to_second_qualifier 判斷單位。例如,
'23' MONTH代表1 year 11 months、'-2' DAY代表-2 days 0 hours 0 minutes 0.0 seconds、'1-2' MONTH代表1 year 2 months,以及'13 day 1 hour 1 minute 1.123 seconds' SECOND代表13 days 1 hour 1 minute 1.123 seconds。如需間隔的輸出格式的詳細資訊,請參閱 間隔樣式。 - year_to_month_qualifier
-
指定間隔的範圍。如果您使用限定詞並以小於限定詞的時間單位建立間隔, 會 AWS Clean Rooms 截斷並捨棄間隔的較小部分。year_to_month_qualifier 的有效值為:
-
YEAR -
MONTH -
YEAR TO MONTH
-
- day_to_second_qualifier
-
指定間隔的範圍。如果您使用限定詞並以小於限定詞的時間單位建立間隔, 會 AWS Clean Rooms 截斷並捨棄間隔的較小部分。day_to_second_qualifier 的有效值為:
-
DAY -
HOUR -
MINUTE -
SECOND -
DAY TO HOUR -
DAY TO MINUTE -
DAY TO SECOND -
HOUR TO MINUTE -
HOUR TO SECOND -
MINUTE TO SECOND
INTERVAL 常值的輸出會截斷至指定的最小 INTERVAL 元件。例如,使用 MINUTE 限定詞時, AWS Clean Rooms 會捨棄小於 MINUTE 的時間單位。
select INTERVAL '1 day 1 hour 1 minute 1.123 seconds' MINUTE得到的值會截斷至
'1 day 01:01:00'。 -
- fractional_precision
-
這是選用參數,用於指定間隔中允許的小數位數。只有在您的間隔包含 SECOND 時,才應指定 fractional_precision 引數。例如,
SECOND(3)會建立只允許三位小數的間隔,例如 1.234 秒。小數最多為 6 位。
當間隔同時指定了 YEAR TO MONTH 和 DAY TO SECOND 部分時,工作階段組態 interval_forbid_composite_literals 會決定是否傳回錯誤。
間隔算術
您可以使用間隔值搭配其他日期時間值來執行算術運算。下表說明可用的運算,以及每項運算產生的資料類型。
注意
可以同時產生 date 和 timestamp 結果的運算會根據方程式中涉及的最小時間單位來進行。例如,當您將 interval 新增至 date 時,如果是 YEAR TO MONTH 間隔,則結果為 date,如果是 DAY TO SECOND 間隔,則結果為時間戳記。
第一個運算元為 interval 的運算會針對指定的第二個運算元產生下列結果:
| 運算子 | Date | 時間戳記 | Interval | 數值 |
|---|---|---|---|---|
| - | N/A | N/A | Interval | N/A |
| + | Date | 日期/時間戳記 | Interval | N/A |
| * | N/A | N/A | N/A | Interval |
| / | N/A | N/A | N/A | Interval |
第一個運算元為 date 的運算會針對指定的第二個運算元產生下列結果:
| 運算子 | Date | 時間戳記 | Interval | 數值 |
|---|---|---|---|---|
| - | 數值 | Interval | 日期/時間戳記 | Date |
| + | N/A | N/A | N/A | N/A |
第一個運算元為 timestamp 的運算會針對指定的第二個運算元產生下列結果:
| 運算子 | Date | 時間戳記 | Interval | 數值 |
|---|---|---|---|---|
| - | 數值 | Interval | 時間戳記 | 時間戳記 |
| + | N/A | N/A | N/A | N/A |
間隔樣式
-
postgres- 遵循 PostgreSQL 樣式。這是預設值。 -
postgres_verbose- 遵循 PostgreSQL 詳細樣式。 -
sql_standard- 遵循 SQL 標準間隔常值樣式。
下列命令會將間隔樣式設定為 sql_standard。
SET IntervalStyle to 'sql_standard';
postgres 輸出格式
以下是 postgres 間隔樣式的輸出格式。每個數值都可以是負數。
'<numeric> <unit> [, <numeric> <unit> ...]'
select INTERVAL '1-2' YEAR TO MONTH::textvarchar --------------- 1 year 2 mons
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::textvarchar ------------------ 1 day 02:03:04.5678
postgres_verbose 輸出格式
postgres_verbose 語法類似 postgres,但 postgres_verbose 輸出還包含時間單位。
'[@] <numeric> <unit> [, <numeric> <unit> ...] [direction]'
select INTERVAL '1-2' YEAR TO MONTH::textvarchar ----------------- @ 1 year 2 mons
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::textvarchar --------------------------- @ 1 day 2 hours 3 mins 4.56 secs
sql_standard 輸出格式
間隔年到月的格式設定如下。在間隔之前指定負號表示間隔是負值,並套用至整個間隔。
'[-]yy-mm'
間隔天到秒的格式設定如下。
'[-]dd hh:mm:ss.ffffff'
SELECT INTERVAL '1-2' YEAR TO MONTH::textvarchar ------- 1-2
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::textvarchar --------------- 1 2:03:04.5678
間隔資料類型的範例
下列範例示範如何搭配資料表使用 INTERVAL 資料類型。
create table sample_intervals (y2m interval month, h2m interval hour to minute); insert into sample_intervals values (interval '20' month, interval '2 days 1:1:1.123456' day to second); select y2m::text, h2m::text from sample_intervals;y2m | h2m ---------------+----------------- 1 year 8 mons | 2 days 01:01:00
update sample_intervals set y2m = interval '2' year where y2m = interval '1-8' year to month; select * from sample_intervals;y2m | h2m ---------+----------------- 2 years | 2 days 01:01:00
delete from sample_intervals where h2m = interval '2 1:1:0' day to second; select * from sample_intervals;y2m | h2m -----+-----
間隔常值的範例
下列範例會在間隔樣式設定為 postgres 的情況下執行。
下列範例示範如何建立 1 年的 INTERVAL 常值。
select INTERVAL '1' YEARintervaly2m --------------- 1 years 0 mons
如果您指定的 quoted-string 超過限定詞,則會從間隔中截斷剩餘的時間單位。在下列範例中,13 個月的間隔會變成 1 年又 1 個月,但剩餘的 1 個月會因 YEAR 限定詞而被排除。
select INTERVAL '13 months' YEARintervaly2m --------------- 1 years 0 mons
如果您使用的限定詞低於間隔字串,則會將剩餘單位納入。
select INTERVAL '13 months' MONTHintervaly2m --------------- 1 years 1 mons
在間隔中指定精確度會將小數位數截斷至指定的精確度。
select INTERVAL '1.234567' SECOND (3)intervald2s -------------------------------- 0 days 0 hours 0 mins 1.235 secs
如果您未指定精確度, AWS Clean Rooms 會使用最大精確度 6。
select INTERVAL '1.23456789' SECONDintervald2s ----------------------------------- 0 days 0 hours 0 mins 1.234567 secs
下列範例示範如何建立限定範圍的間隔。
select INTERVAL '2:2' MINUTE TO SECONDintervald2s ------------------------------ 0 days 0 hours 2 mins 2.0 secs
限定詞規定您要指定的單位。例如,即使下列範例使用與上一個範例相同的 '2:2' 引號字串, 仍會 AWS Clean Rooms 識別它使用不同的時間單位,因為 限定詞。
select INTERVAL '2:2' HOUR TO MINUTEintervald2s ------------------------------ 0 days 2 hours 2 mins 0.0 secs
每個單位都支援縮寫和複數。例如,5s、5 second 和 5 seconds 是相等的間隔。支援的單位包括年、月、小時、分鐘和秒。
select INTERVAL '5s' SECONDintervald2s ------------------------------ 0 days 0 hours 0 mins 5.0 secs
select INTERVAL '5 HOURS' HOURintervald2s ------------------------------ 0 days 5 hours 0 mins 0.0 secs
select INTERVAL '5 h' HOURintervald2s ------------------------------ 0 days 5 hours 0 mins 0.0 secs