日期函式

日期是許多資料來源中的常見元素。如果欄位包含可識別的日期,它將具有日期日期時間資料類型。在視覺化項中使用日期欄位時,它們將獲得一組特殊的功能,包括自動日期層次結構向下鑽取、特定於日期的過濾器選項和專門的日期格式選項。在計算中使用日期通常需要使用具體日期函數。

熟悉其他日期概念

日期函式有時會引用特定於日期的元素,包括 date_part 參數、可選 [start_of_week] 參數和日期常值 (#)。這些將在本主題的末尾更詳細地介紹。

還有其他幾個可能感興趣但不屬於日期函式的主題:

提示:您的欄位是否已被識別為日期(其資料窗格含日期圖示)?以及您是否正在嘗試控制其在視覺效果中的顯示方式?

您可能需要對其設定格式而不是使用日期函數。請參閱自訂日期格式 以及使用日期欄位的相關主題。您可以使用此頁面中的日期函數操作日期計算字段,而不是設定其顯示格式。

Tableau 提供的日期函數

DATE

將字串和數字運算式轉換為日期的類型轉換函式,只要它們是可識別的格式。

語法DATE(expression)
輸出日期
定義在指定數字、字串或日期 <expression> 的情況下傳回日期。
範例
DATE([Employee Start Date])
DATE("September 22, 2018") 
DATE("9/22/2018")
DATE(#2018-09-22 14:52#)
說明

DATEPARSE 不同,不需要提供模式,因為 DATE 會自動識別許多標準日期格式。但是,如果 DATE 無法識別輸入,請嘗試使用 DATEPARSE 並指定格式。

MAKEDATE 是另一個類似的函式,但 MAKEDATE 需要輸入年、月和日的數值。

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><date2n> 之差(以 <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 是非常相似的計算,它將指定日期部分的值作為連續整數傳回。DATEPART 可以更快,因為它是數字運算。

透過變更計算結果的屬性(維度或度量、連續或離散)和日期格式,可以將 DATEPARTDATENAME 的結果格式設定為相同。

DATEPARSE 是反函數,它會接受字串值並將其格式化為日期。

DATEPARSE

將特定格式的字串作為日期傳回。

語法DATEPARSE(date_format, date_string)
輸出日期
定義<date_format> 引數會描述 <date_string> 欄位的排列方式。由於字串欄位的排序方式可以多種多樣,因此 <date_format> 必須完全符合。有關完整詮釋,請參閱將欄位轉換為日期欄位(連結在新視窗開啟)
範例
DATEPARSE('yyyy-MM-dd', "1986-03-25") = #March 25, 1986#
說明

DATE 是一個類似的函數,可以自動識別許多標準日期格式。如果 DATE 無法識別輸入模式,則 DATEPARSE 可能是更好的選擇。

MAKEDATE 是另一個類似的函式,但 MAKEDATE 需要輸入年、月和日的數值。

將日期分開並傳回其部分值的反函數是 DATEPART(整數輸出)和 DATENAME(字串輸出)。

資料庫限制

DATEPARSE 可透過以下連接器獲得:非舊版 Excel 和文字檔連線、Amazon EMR Hadoop Hive、Cloudera Hadoop、Google 試算表、Hortonworks Hadoop Hive、MapR Hadoop Hive、MySQL、Oracle、PostgreSQL 以及 Tableau 資料擷取。有些格式可能並非適用於所有連線。

Hive 變體不支援 DATEPARSE。僅支援 Denodo、Drill 和 Snowflake。

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 日期。

DATENAME 是非常相似的計算,它將指定日期部分的名稱作為離散字串傳回。DATEPART 可以更快,因為它是數字運算。透過變更欄位的屬性(維度或度量、連續或離散)和日期格式,可以將 DATEPARTDATENAME 的結果格式設定為相同。

DATEPARSE 是反函數,它會接受字串值並將其格式化為日期。

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 週數,則使用 start_of_week。ISO 週數始終從星期一開始。對於此範例的地區設定,未指定 start_of_week 表示該週從星期日開始。

說明

支援 ISO 8601 日期。

您不該使用 DATETRUNC 來停止在視覺效果中顯示日期時間欄位的時間。如果要截斷日期的顯示而不是捨入其準確性,請調整格式(連結在新視窗開啟)

例如,DATETRUNC('day', #5/17/2022 3:12:48 PM#) ,如果在視覺效果中格式化為顯示秒數,將顯示為 5/17/2022 12:00:00 AM

DAY

以整數的形式傳回月份的天 (1-31)。

語法DAY(date)
輸出整數
定義以整數的形式傳回給定 <date> 的天。
範例
Day(#September 22, 2018#) = 22
說明另請參閱 WEEKMONTH季度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
說明另請參閱 ISOWEEKISOWEEKDAYISOYEAR,以及非 ISO 等值。

ISOWEEK

語法ISOWEEK(date)
輸出整數
定義以整數形式傳回給定 <date> 基於 ISO8601 週的週。
範例
ISOWEEK(#1986-03-25#) = 13
說明另請參閱 ISOWEEKDAYISOQUARTERISOYEAR,以及非 ISO 等值。

ISOWEEKDAY

語法ISOWEEKDAY(date)
輸出整數
定義以整數形式傳回給定 <date> 基於 ISO8601 週的平日。
範例
ISOWEEKDAY(#1986-03-25#) = 2
說明另請參閱 ISOWEEKISOQUARTERISOYEAR,以及非 ISO 等值。

ISOYEAR

語法ISOYEAR(date)
輸出整數
定義以整數形式傳回給定 <date> 基於 ISO8601 週的年。
範例
ISOYEAR(#1986-03-25#) = 1,986
說明另請參閱 ISOWEEKISOWEEKDAYISOQUARTER,以及非 ISO 等值。

MAKEDATE

語法MAKEDATE(year, month, day)
輸出日期
定義傳回一個依據指定 <year><monthg><day> 構造的日期值。
範例
MAKEDATE(1986,3,25) = #1986-03-25#
說明

請注意:輸入錯誤的值會被調整成日期,例如 MAKEDATE(2020,4,31) = May 1, 2020,而不是傳回沒有 4 月 31 日的錯誤。

可用於 Tableau 擷取。檢查在其他資料來源中的可用性。

MAKEDATE 需要日期部分的數字輸入。如果您的資料是一個應該是日期的字串,請嘗試使用 DATE 函數。DATE 自動識別許多標準日期格式。如果 DATE 無法識別輸入,請嘗試使用 DATEPARSE

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 為可用於 Tableau 資料擷取和其他一些資料來源的類似函數。

MAKETIME

語法MAKETIME(hour, minute, second)
輸出日期時間
定義傳回一個依據指定 <hour><minute><second> 構造的日期值。
範例
MAKETIME(14, 52, 40) = #1/1/1899 14:52:40#
說明

由於 Tableau 不支援時間資料類型,僅支援日期時間,因此輸出為日期時間。該欄位的日期部分將是 1/1/1899。

MAKEDATETIME 類似的函數,僅適用於 MYSQL 相容的連線。

MAX

語法MAX(expression)MAX(expr1, expr2)
輸出與引數相同的資料類型,若引數的任何部分為 NULL,則為 NULL
定義

傳回兩個引數(必須為相同資料類型)中的較大值。

MAX 也可以作為彙總套用於單一欄位。

範例
MAX(4,7) = 7
MAX(#3/25/1986#, #2/20/2021#) = #2/20/2021#
MAX([Name]) = "Zander"
說明

對於字串

MAX 通常是按字母順序排在最後的值。

對於資料庫資料來源,MAX 字串值是資料庫為欄定義的排序順序中的最高值。

對於日期

對於日期,MAX 是最近的日期。如果 MAX 是彙總,結果不會有日期階層。如果 MAX 是比較,結果將保留日期階層。

作為彙總

MAX(expression) 為彙總函數,會傳回單一彙總結果。這在視覺效果中顯示為 AGG(expression)

作為比較

MAX(expr1, expr2) 會比較兩個值,並傳回一個列層級值。

另請參閱 MIN

MIN

語法MIN(expression)MIN(expr1, expr2)
輸出與引數相同的資料類型,若引數的任何部分為 NULL,則為 NULL 
定義

傳回兩個引數(必須為相同資料類型)的最小值。

MIN 也可以作為彙總套用於單一欄位。

範例
MIN(4,7) = 4
MIN(#3/25/1986#, #2/20/2021#) = #3/25/1986#
MIN([Name]) = "Abebi"
說明

對於字串

MIN 通常是按字母順序排列在最前面的值。

對於資料庫資料來源,MIN 字串值是資料庫為欄定義的排序順序中的最低值。

對於日期

對於日期,MIN 是最早的日期。如果 MIN 是彙總,結果不會有日期階層。如果 MIN 是比較,結果將保留日期階層。

作為彙總

MIN(expression) 為彙總函數,會傳回單一彙總結果。這在視覺效果中顯示為 AGG(expression)

作為比較

MIN(expr1, expr2) 會比較兩個值,並傳回一個列層級值。

另請參閱 MAX

MONTH

語法MONTH(date)
輸出整數
定義以整數的形式傳回給定 <date> 的月份。
範例
MONTH(#1986-03-25#) = 3
說明另請參閱 DAYWEEK季度YEAR,以及 ISO 等值

NOW

語法NOW()
輸出日期時間
定義傳回目前本機系統日期和時間。
範例
NOW() = 1986-03-25 1:08:21 PM
說明

NOW 沒有採用引數。

另請參閱 TODAY,這是一個類似的計算,它傳回日期而不是日期時間。

如果資料來源是即時連線,則係統日期和時間可能位於另一個時區。有關如何聯接資料的詳情,請參閱知識庫

季度

語法QUARTER(date)
輸出整數
定義以整數的形式傳回給定 <date> 的季度。
範例
QUARTER(#1986-03-25#) = 1
說明另請參閱 DAYWEEKMONTHYEAR,以及 ISO 等值

TODAY

語法TODAY()
輸出日期
定義傳回目前本機系統日期。
範例
TODAY() = 1986-03-25
說明

TODAY 沒有採用引數。

另請參閱 NOW,這是一個類似的計算,它傳回日期時間而不是日期。

如果資料來源是即時連線,則係統日期可能位於另一個時區。有關如何聯接資料的詳情,請參閱知識庫

WEEK

語法WEEK(date)
輸出整數
定義以整數的形式傳回給定 <date> 的週。
範例
WEEK(#1986-03-25#) = 13
說明另請參閱 DAYMONTH季度YEAR,以及 ISO 等值

YEAR

語法YEAR(date)
輸出整數
定義以整數的形式傳回給定 <date> 的年份。
範例
YEAR(#1986-03-25#) = 1,986
說明另請參閱 DAYWEEKMONTH季度,以及 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 樣本資料來源建立日期計算。

  1. 在 Tableau Desktop 中,連線到 Tableau 附帶的 [Sample - Superstore] 已儲存資料來源。
  2. 開啟工作表。
  3. 從 [資料] 窗格中的 [維度] 下,將 [Order Date] (訂單日期)拖到 [列] 架。
  4. 在 [列] 架上,按一下 [YEAR(Order Date)] 欄位上的加號圖示 (+)。

    [QUARTER(Order Date)] 將新增到 [列] 架,並且檢視將更新。

  5. [列] 架上,按一下 [QUARTER(Order Date)] 欄位上的加號圖示 (+),以下鑽到 [MONTH(Order Date)] 。

  6. 選取 [分析] > [建立計算欄位]
  7. 在開啟的計算編輯器中,執行以下操作:
    • 將計算欄位命名為 [Quarter Date] (季度日期)。
    • 輸入以下公式:DATETRUNC('quarter', [Order Date])
    • 完成後,按一下 [確定]

      新的日期計算將出現在 [資料] 窗格中的 [維度] 下。就像其他欄位一樣,您可以在一個或多個視覺效果中使用該欄位。

  8. 從 [資料] 窗格中的 [維度] 下,將 [Quarter Date] (季度日期)拖到 [列] 架,並將其放在 [MONTH(Order Date)] 右側。視覺效果將更新為包含年份值。這是因為 Tableau 將日期資料累積到最高詳細層級。
  9. 在 [列] 架上,以右鍵按一下 [YEAR(Quarter Date)] ,並選取 [精確日期]
  10. 在 [列] 架上,再次以右鍵按一下 [YEAR(Quarter Date)] ,並選取 [離散]

    視覺效果將更新為包含表中每一列的準確季度日期。

感謝您的意見反應!已成功提交您的意見回饋。謝謝!