在使用 AppSheet 開發應用程式時,我們經常需要根據時間來進行判斷或分類資料。一個常見的情境是,希望 App 自動根據記錄的時間戳記,判斷該筆資料是屬於「早上」還是「晚上」。直覺上,大家會想到使用 HOUR() 函數,但很多人在此會遇到一個常見的錯誤。
這篇文章將帶您了解 AppSheet 中 HOUR() 函數的正確用法,並解決 Parameter 1 of function HOUR is of the wrong type 這個惱人的錯誤。
情境說明:血壓記錄 App
假設我們正在製作一個每日血壓記錄 App,使用者每天會在早上和晚上各量一次血壓。為了方便後續的數據分析(例如計算早上的平均血壓),我們希望新增一個虛擬欄位(Virtual Column),讓 App 自動根據「時間戳記」欄位,標示出「早上」或「晚上」。
我們的判斷邏輯很簡單:
如果時間在中午 12 點以前(不包含 12 點),就標示為「早上」。
否則,就標示為「晚上」。
常見的錯誤與原因
根據上述邏輯,我們很自然地會寫出以下這樣的公式:
IF(HOUR([時間戳記]) < 12, "早上", "晚上")
然而,當您輸入這個公式時,AppSheet 會馬上顯示錯誤訊息:
Parameter 1 of function HOUR is of the wrong type
這個錯誤的意思是 HOUR() 函數的第一個參數收到了錯誤的資料類型。為什麼會這樣呢?
關鍵原因:
這點和許多其他程式語言非常不同。在 AppSheet 中:
Time 或 DateTime 代表一個特定的時間點(例如:10:30 AM)。
Duration 代表一段時間的長度(例如:2 小時 15 分鐘)。
HOUR() 函數的設計是用來從一段時間長度中,提取出總共有幾個「小時」。直接將一個「時間點」餵給它,自然就會出現類型不符的錯誤。
正確的解決方案
要解決這個問題,我們需要先將「時間點」轉換成「時間長度」。最簡單的方法,就是計算該時間點距離當天凌晨 00:00:00 有多長。
步驟一:將
首先,我們需要從 [時間戳記] 欄位中只取出時間的部分,然後減去 "00:00:00"。
TIME([時間戳記]):從 DateTime 類型中抽取出 Time 類型的部分。
TIME([時間戳記]) - "00:00:00":將取出的時間減去零時零分零秒,結果就會是一個 Duration 類型的值。
步驟二:將
現在我們有了正確的 Duration 類型,可以安心地將它放入 HOUR() 函數中來取得小時數。
HOUR(TIME([時間戳記]) - "00:00:00")
步驟三:組合完整的 IF 判斷式
最後,將這個正確取得小時數的公式,放回我們最初的 IF 判斷式中,就大功告成了!
// 正確的寫法
IF(
HOUR(TIME([時間戳記]) - "00:00:00") < 12,
"早上",
"晚上"
)
AppSheet 實作步驟
前往您的 App 編輯器,進入 Data > Columns,並選擇您的資料表。
點擊 Add Virtual Column 新增一個虛擬欄位。
Column Name 欄位命名為「時段」。
在 App formula 欄位中,貼上我們最終的正確公式。
IF(HOUR(TIME([時間戳記]) - "00:00:00") < 12, "早上", "晚上")
非常重要的一步:將此欄位的 Type 從預設的 Number 修改為 Text,因為我們的公式回傳的是「早上」或「晚上」這兩個文字字串。
點擊 Done,然後 Save 儲存您的變更。
完成後,您就可以在 App 的預覽畫面中看到,每一筆資料都根據時間被正確地標示為早上或晚上了。
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。