日期函式
日期是許多資料來源中的常見元素。如果欄位包含可識別的日期,它將具有日期或日期時間資料類型。在視覺化項中使用日期欄位時,它們將獲得一組特殊的功能,包括自動日期層次結構向下鑽取、特定於日期的過濾器選項和專門的日期格式選項。在計算中使用日期通常需要使用具體日期函數。
熟悉其他日期概念
日期函式有時會引用特定於日期的元素,包括 date_part
參數、可選 [start_of_week]
參數和日期常值 (#)。這些將在本主題的末尾更詳細地介紹。
還有其他幾個可能感興趣但不屬於日期函式的主題:
- 格式化日期在視覺化項中的顯示方式:自訂日期格式
- 有關詳情,請參閱資料來源的日期屬性
- 使用會計日期:會計日期
- 使用 ISO-8601 日曆: ISO-8601 以週為基準的日曆
提示:您的欄位是否已被識別為日期(其資料窗格含日期圖示)?以及您是否正在嘗試控制其在視覺效果中的顯示方式?您可能需要對其設定格式而不是使用日期函數。例如,希望將 22Sept2024 顯示為 09/24。這是透過格式化日期而不是計算來處理的。
請參閱自訂日期格式 以及使用日期欄位的相關主題。您可以使用此頁面中的日期函數操作日期計算字段,而不是設定其顯示格式。
Tableau 提供的日期函數
DATE
將字串和數字運算式轉換為日期的類型轉換函式,只要它們是可識別的格式。
語法 | DATE(expression) |
輸出 | 日期 |
定義 | 在指定數字、字串或日期 <expression> 的情況下傳回日期。 |
範例 | DATE([Employee Start Date]) DATE("September 22, 2018") DATE("9/22/2018") DATE(#2018-09-22 14:52#) |
說明 | 與
|
DATEADD
將指定數量的日期部分(月、日等)添加到開始日期。
語法 | DATEADD(date_part, interval, date) |
輸出 | 日期 |
定義 | 傳回新增 <interval> 至該日期指定 <date_part> 的 <date> 。例如,將開始日期新增三個月或 12 天。 |
範例 | 將所有到期日期推遲一週 DATEADD('week', 1, [due date]) 在 2021 年 2 月 20 日的基礎上增加 280 天 DATEADD('day', 280, #2/20/21#) = #November 27, 2021# |
說明 | 支援 ISO 8601 日期。 |
DATEDIFF
傳回兩個日期之間的日期部分數(週、年等)。
語法 | DATEDIFF(date_part, date1, date2, [start_of_week]) |
輸出 | 整數 |
定義 | 返回 <date1> 與 <date2> 之差(以 <date_part> 的單位表示)。例如,減去某人進入和離開樂隊的日期,以查看他們留在樂隊中的時間。 |
範例 | 1986 年 3 月 25 日至 2021 年 2 月 20 日之間的天數 DATEDIFF('day', #3/25/1986#, #2/20/2021#) = 12,751 一個人在樂隊里呆了多少個月 DATEDIFF('month', [date joined band], [date left band]) |
說明 | 支援 ISO 8601 日期。 |
DATENAME
將指定日期部分的名稱作為離散字串傳回。
語法 | DATENAME(date_part, date, [start_of_week]) |
輸出 | 字串 |
定義 | 以字串的形式返回 <date> 的 <date_part> 。 |
範例 | DATENAME('year', #3/25/1986#) = "1986" DATENAME('month', #1986-03-25#) = "March" |
說明 | 支援 ISO 8601 日期。 DATEPART 是非常相似的計算,它將指定日期部分的值作為連續整數傳回。 透過變更計算結果的屬性(維度或度量、連續或離散)和日期格式,可以將 DATEPARSE 是反函數,它會接受字串值並將其格式化為日期。 |
DATEPARSE
將特定格式的字串作為日期傳回。
語法 | DATEPARSE(date_format, date_string) |
輸出 | 日期 |
定義 | <date_format> 引數會描述 <date_string> 欄位的排列方式。由於字串欄位的排序方式可以多種多樣,因此 <date_format> 必須完全符合。有關完整詮釋格式設定詳情,請參閱將欄位轉換為日期欄位(連結在新視窗開啟)。 |
範例 | DATEPARSE('yyyy-MM-dd', "1986-03-25") = #March 25, 1986# |
說明 |
|
資料庫限制 |
Hive 變體不支援 |
DATEPART
將指定日期部分的名稱作為整數傳回。
語法 | DATEPART(date_part, date, [start_of_week]) |
輸出 | 整數 |
定義 | 以整數的形式返回 <date> 的 <date_part> 。 |
範例 | DATEPART('year', #1986-03-25#) = 1986 DATEPART('month', #1986-03-25#) = 3 |
說明 | 支援 ISO 8601 日期。
|
DATETRUNC
這個函式可以被認為是日期四捨五入。它需要一個特定的日期並以所需的特異性傳回該日期的版本。因為每個日期都必須具有日、月、季度和年的值,所以 DATETRUNC
將值設定為每個日期部分的最小值,直到指定的日期部分。請參閱該範例了解更多資訊。
語法 | DATETRUNC(date_part, date, [start_of_week]) |
輸出 | 日期 |
定義 | 按 <date_part> 指定的準確度截斷 <date> 。此函式傳回新日期。例如,以月份層級截斷處於月份中間的日期時,此函式傳回當月的第一天。 |
範例 | DATETRUNC('day', #9/22/2018#) = #9/22/2018# DATETRUNC('iso-week', #9/22/2018#) = #9/17/2018# (包含 2018 年 9 月 22 日的那一週中的星期一) DATETRUNC(quarter, #9/22/2018#) = #7/1/2018# (包含 9/22/2018 的那個季度的第一天) 附註:如果是週和 ISO 週數,則使用 |
說明 | 支援 ISO 8601 日期。 您不該使用 例如, |
DAY
以整數的形式傳回月份的天 (1-31)。
語法 | DAY(date) |
輸出 | 整數 |
定義 | 以整數的形式傳回給定 <date> 的天。 |
範例 | Day(#September 22, 2018#) = 22 |
說明 | 另請參閱 WEEK 、MONTH 、季度 、YEAR ,以及 ISO 等值。 |
ISDATE
檢查字串是否是有效的日期格式。
語法 | ISDATE(string) |
輸出 | 布林值 |
定義 | 如果給定 <string> 為有效日期,則傳回 true。 |
範例 | ISDATE(09/22/2018) = true ISDATE(22SEP18) = false |
說明 | 必需的參數必須是字串。ISDATE 不能用於具有日期資料類型的欄位 - 計算將傳回錯誤。 |
ISOQUARTER
語法 | ISOQUARTER(date) |
輸出 | 整數 |
定義 | 以整數形式傳回給定 <date> 基於 ISO8601 週的季度。 |
範例 | ISOQUARTER(#1986-03-25#) = 1 |
說明 | 另請參閱 ISOWEEK 、ISOWEEKDAY 、ISOYEAR ,以及非 ISO 等值。 |
ISOWEEK
語法 | ISOWEEK(date) |
輸出 | 整數 |
定義 | 以整數形式傳回給定 <date> 基於 ISO8601 週的週。 |
範例 | ISOWEEK(#1986-03-25#) = 13 |
說明 | 另請參閱 ISOWEEKDAY 、ISOQUARTER 、ISOYEAR ,以及非 ISO 等值。 |
ISOWEEKDAY
語法 | ISOWEEKDAY(date) |
輸出 | 整數 |
定義 | 以整數形式傳回給定 <date> 基於 ISO8601 週的平日。 |
範例 | ISOWEEKDAY(#1986-03-25#) = 2 |
說明 | 另請參閱 ISOWEEK 、ISOQUARTER 、ISOYEAR ,以及非 ISO 等值。 |
ISOYEAR
語法 | ISOYEAR(date) |
輸出 | 整數 |
定義 | 以整數形式傳回給定 <date> 基於 ISO8601 週的年。 |
範例 | ISOYEAR(#1986-03-25#) = 1,986 |
說明 | 另請參閱 ISOWEEK 、ISOWEEKDAY 、ISOQUARTER ,以及非 ISO 等值。 |
MAKEDATE
語法 | MAKEDATE(year, month, day) |
輸出 | 日期 |
定義 | 傳回一個依據指定 <year> 、<month> 和 <day> 構造的日期值。 |
範例 | MAKEDATE(1986,3,25) = #1986-03-25# |
說明 | 請注意:輸入錯誤的值會被調整成日期,例如 可用於 Tableau 擷取。檢查在其他資料來源中的可用性。
|
MAKEDATETIME
語法 | MAKEDATETIME(date, time) |
輸出 | 日期時間 |
定義 | 傳回合併 <date> 和 <time> 的日期時間。日期可以是 date、datetime 或 string 類型。時間必須是 datetime。 |
範例 | MAKEDATETIME("1899-12-30", #07:59:00#) = #12/30/1899 7:59:00 AM# MAKEDATETIME([Date], [Time]) = #1/1/2001 6:00:00 AM# |
說明 | 附注:此功能僅適用於與 MySQL 相容的連線(對於 Tableau 為 MySQL 和 Amazon Aurora)。
|
MAKETIME
語法 | MAKETIME(hour, minute, second) |
輸出 | 日期時間 |
定義 | 傳回一個依據指定 <hour> 、<minute> 和 <second> 構造的日期值。 |
範例 | MAKETIME(14, 52, 40) = #1/1/1899 14:52:40# |
說明 | 由於 Tableau 不支援時間資料類型,僅支援日期時間,因此輸出為日期時間。該欄位的日期部分將是 1/1/1899。 與 |
MAX
語法 | MAX(expression) 或 MAX(expr1, expr2) |
輸出 | 與引數相同的資料類型,若引數的任何部分為 NULL,則為 NULL 。 |
定義 | 傳回兩個引數(必須為相同資料類型)中的較大值。
|
範例 | MAX(4,7) = 7 |
說明 | 對於字串
對於資料庫資料來源, 對於日期 對於日期, 作為彙總
作為比較
另請參閱 |
MIN
語法 | MIN(expression) 或 MIN(expr1, expr2) |
輸出 | 與引數相同的資料類型,若引數的任何部分為 NULL,則為 NULL 。 |
定義 | 傳回兩個引數(必須為相同資料類型)的最小值。
|
範例 | MIN(4,7) = 4 |
說明 | 對於字串
對於資料庫資料來源, 對於日期 對於日期, 作為彙總
作為比較
另請參閱 |
MONTH
語法 | MONTH(date) |
輸出 | 整數 |
定義 | 以整數的形式傳回給定 <date> 的月份。 |
範例 | MONTH(#1986-03-25#) = 3 |
說明 | 另請參閱 DAY 、WEEK 、季度 、YEAR ,以及 ISO 等值 |
NOW
語法 | NOW() |
輸出 | 日期時間 |
定義 | 傳回目前本機系統日期和時間。 |
範例 | NOW() = 1986-03-25 1:08:21 PM |
說明 |
另請參閱 如果資料來源是即時連線,則係統日期和時間可能位於另一個時區。有關如何聯接資料的詳情,請參閱知識庫。 |
季度
語法 | QUARTER(date) |
輸出 | 整數 |
定義 | 以整數的形式傳回給定 <date> 的季度。 |
範例 | QUARTER(#1986-03-25#) = 1 |
說明 | 另請參閱 DAY 、WEEK 、MONTH 、YEAR ,以及 ISO 等值 |
TODAY
語法 | TODAY() |
輸出 | 日期 |
定義 | 傳回目前本機系統日期。 |
範例 | TODAY() = 1986-03-25 |
說明 |
另請參閱 NOW,這是一個類似的計算,它傳回日期時間而不是日期。 如果資料來源是即時連線,則係統日期可能位於另一個時區。有關如何聯接資料的詳情,請參閱知識庫。 |
WEEK
語法 | WEEK(date) |
輸出 | 整數 |
定義 | 以整數的形式傳回給定 <date> 的週。 |
範例 | WEEK(#1986-03-25#) = 13 |
說明 | 另請參閱 DAY 、MONTH 、季度 、YEAR ,以及 ISO 等值 |
YEAR
語法 | YEAR(date) |
輸出 | 整數 |
定義 | 以整數的形式傳回給定 <date> 的年份。 |
範例 | YEAR(#1986-03-25#) = 1,986 |
說明 | 另請參閱 DAY 、WEEK 、MONTH 、季度 ,以及 ISO 等值 |
date_part
Tableau 中的許多日期函數都採用引數 date_part
,它是一個字串常數,告訴函數要考慮日期的哪一部分,例如日、週、季度等。可以使用的有效 date_part
值包括:
date_part | 值 |
---|---|
'year' | 四位數年份 |
'quarter' | 1-4 |
'month' | 1-12 或「一月」、「二月」等 |
'dayofyear' | 一年中的第幾天;1 月 1 日為 1、2 月 1 日為 32,依此類推 |
'day' | 1-31 |
'weekday' | 1-7 或「週日」、「週一」等 |
'week' | 1-52 |
'hour' | 0-23 |
'minute' | 0-59 |
'second' | 0-60 |
'iso-year' | 4 位數 ISO 8601 年份 |
'iso-quarter' | 1-4 |
'iso-week' | 1-52,一週的開始始終是週一 |
'iso-weekday' | 1-7,一週的開始始終是週一 |
[start_of_week]
參數
有些函式有可選參數 [start_of_week]
。可使用 start_of_week
指定將哪一天視為一週的第一天,例如「星期日」或「星期一」。如果省略,一週的開始由資料來源確定。請參閱資料來源的日期屬性。
參看以下範例,9 月 22 日是星期日,9 月 24 日是星期二。DATEDIFF 函式用於計算這些日期之間的週數。
DATEDIFF('week', #2013-09-22#, #2013-09-24#, 'monday') = 1
- 因為 start_of_week 是「星期一」,所以這些日期在不同的週內。
DATEDIFF('week', #2013-09-22#, #2013-09-24#, 'sunday') = 0
- 因為 start_of_week 是「星期日」,所以這些日期在同一週。
日期常值 (#)
範例通常在日期運算式中使用井號 (#)。這是日期常值,類似於對文本字串使用引號,它告訴 Tableau 符號內的值是日期。
如果沒有日期常值,日期可能會被解釋為各種其他資料類型。例如:
格式 | 資料類型 | 值 |
'March 25, 1986' | 字串 | 'March 25, 1986' |
#3/25/1986# | Date(日期) | #3/25/1986# |
03/25/1986 | 浮動小數位數 | 0.00006042 |
1986-03-25 | 整數 | 1,958 |
March 25, 1986 | 無效 |
如需更多資訊,請參閱文字運算式語法。
建立日期計算
練習使用 Superstore 樣本資料來源建立日期計算。
- 在 Tableau Desktop 中,連線到 Tableau 附帶的 [Sample - Superstore] 已儲存資料來源。
- 開啟工作表。
- 從 [資料] 窗格中的 [維度] 下,將 [Order Date] (訂單日期)拖到 [列] 架。
- 在 [列] 架上,按一下 [YEAR(Order Date)] 欄位上的加號圖示 (+)。
[QUARTER(Order Date)] 將新增到 [列] 架,並且檢視將更新。
- 在 [列] 架上,按一下 [QUARTER(Order Date)] 欄位上的加號圖示 (+),以下鑽到 [MONTH(Order Date)] 。
- 選取 [分析] > [建立計算欄位]。
- 在開啟的計算編輯器中,執行以下操作:
- 將計算欄位命名為 [Quarter Date] (季度日期)。
- 輸入以下公式:
DATETRUNC('quarter', [Order Date])
- 完成後,按一下 [確定]。
新的日期計算將出現在 [資料] 窗格中的 [維度] 下。就像其他欄位一樣,您可以在一個或多個視覺效果中使用該欄位。
- 從 [資料] 窗格中的 [維度] 下,將 [Quarter Date] (季度日期)拖到 [列] 架,並將其放在 [MONTH(Order Date)] 右側。視覺效果將更新為包含年份值。這是因為 Tableau 將日期資料累積到最高詳細層級。
- 在 [列] 架上,以右鍵按一下 [YEAR(Quarter Date)] ,並選取 [精確日期] 。
- 在 [列] 架上,再次以右鍵按一下 [YEAR(Quarter Date)] ,並選取 [離散] 。
視覺效果將更新為包含表中每一列的準確季度日期。