View a markdown version of this page

間隔資料類型和常值 - AWS Clean Rooms

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

間隔資料類型和常值

您可以使用間隔資料類型來儲存下列單位的持續時間:secondsminuteshoursdaysmonthsyears。間隔資料類型和常值可用於日期時間計算,例如,將間隔新增至日期和時間戳記、加總間隔,以及從日期或時間戳記減去間隔。間隔常值可作為資料表中間隔資料類型欄的輸入值。

間隔資料類型的語法

若要指定間隔資料類型,以年和月為單位儲存持續時間:

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 會決定是否傳回錯誤。

間隔算術

您可以使用間隔值搭配其他日期時間值來執行算術運算。下表說明可用的運算,以及每項運算產生的資料類型。

注意

可以同時產生 datetimestamp 結果的運算會根據方程式中涉及的最小時間單位來進行。例如,當您將 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::text varchar --------------- 1 year 2 mons
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text varchar ------------------ 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::text varchar ----------------- @ 1 year 2 mons
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text varchar --------------------------- @ 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::text varchar ------- 1-2
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text varchar --------------- 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' YEAR intervaly2m --------------- 1 years 0 mons

如果您指定的 quoted-string 超過限定詞,則會從間隔中截斷剩餘的時間單位。在下列範例中,13 個月的間隔會變成 1 年又 1 個月,但剩餘的 1 個月會因 YEAR 限定詞而被排除。

select INTERVAL '13 months' YEAR intervaly2m --------------- 1 years 0 mons

如果您使用的限定詞低於間隔字串,則會將剩餘單位納入。

select INTERVAL '13 months' MONTH intervaly2m --------------- 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' SECOND intervald2s ----------------------------------- 0 days 0 hours 0 mins 1.234567 secs

下列範例示範如何建立限定範圍的間隔。

select INTERVAL '2:2' MINUTE TO SECOND intervald2s ------------------------------ 0 days 0 hours 2 mins 2.0 secs

限定詞規定您要指定的單位。例如,即使下列範例使用與上一個範例相同的 '2:2' 引號字串, 仍會 AWS Clean Rooms 識別它使用不同的時間單位,因為 限定詞。

select INTERVAL '2:2' HOUR TO MINUTE intervald2s ------------------------------ 0 days 2 hours 2 mins 0.0 secs

每個單位都支援縮寫和複數。例如,5s5 second5 seconds 是相等的間隔。支援的單位包括年、月、小時、分鐘和秒。

select INTERVAL '5s' SECOND intervald2s ------------------------------ 0 days 0 hours 0 mins 5.0 secs
select INTERVAL '5 HOURS' HOUR intervald2s ------------------------------ 0 days 5 hours 0 mins 0.0 secs
select INTERVAL '5 h' HOUR intervald2s ------------------------------ 0 days 5 hours 0 mins 0.0 secs