DAYOFWEEK 函數使用手冊
函數描述
DAYOFWEEK
函數用于返回指定日期是一周中的第幾天。該函數遵循標準的星期編號約定,返回值范圍為 1-7,其中:
- 1 = 星期日 (Sunday)
- 2 = 星期一 (Monday)
- 3 = 星期二 (Tuesday)
- 4 = 星期三 (Wednesday)
- 5 = 星期四 (Thursday)
- 6 = 星期五 (Friday)
- 7 = 星期六 (Saturday)
語法
DAYOFWEEK(date_expression)
參數說明
- date_expression: 日期表達式,支持以下類型:
- TIMESTAMP 類型的時間戳
- BIGINT 類型的 Unix 時間戳(秒或毫秒)
- VARCHAR/NCHAR 類型的日期字符串
- NULL 值
返回值
- 返回類型:
BIGINT
- 返回值范圍:1-7(對應星期日到星期六)
- 如果輸入為 NULL,則返回 NULL
使用示例
1. 使用 TIMESTAMP 類型
-- 查詢當前時間是星期幾
SELECT DAYOFWEEK(NOW()) AS day_of_week;-- 查詢指定時間戳是星期幾
SELECT DAYOFWEEK('2024-01-15 10:30:00') AS day_of_week;
-- 結果: 2 (星期一)
2. 使用 Unix 時間戳
-- 使用秒級時間戳 (2024-01-15 對應的時間戳)
SELECT DAYOFWEEK(1705315800) AS day_of_week;
-- 結果: 4 (星期三)-- 使用毫秒級時間戳
SELECT DAYOFWEEK(1705315800000) AS day_of_week;
-- 結果: 4 (星期三)
3. 使用日期字符串
-- ISO 格式日期字符串
SELECT DAYOFWEEK('2024-01-15') AS day_of_week;
-- 結果: 2 (星期一)-- 帶時間的日期字符串
SELECT DAYOFWEEK('2024-12-25 12:00:00') AS day_of_week;
-- 結果: 4 (星期三,圣誕節)
4. 在表查詢中使用
-- 假設有一個訂單表 orders,包含 order_time 字段
SELECT order_id,order_time,DAYOFWEEK(order_time) AS order_day,CASE DAYOFWEEK(order_time)WHEN 1 THEN '星期日'WHEN 2 THEN '星期一'WHEN 3 THEN '星期二'WHEN 4 THEN '星期三'WHEN 5 THEN '星期四'WHEN 6 THEN '星期五'WHEN 7 THEN '星期六'END AS day_name
FROM orders
WHERE order_time >= '2024-01-01';
5. 統計分析示例
-- 統計每個工作日的訂單數量
SELECT DAYOFWEEK(order_time) AS day_of_week,COUNT(*) AS order_count
FROM orders
WHERE order_time >= '2024-01-01'
GROUP BY DAYOFWEEK(order_time)
ORDER BY day_of_week;-- 篩選周末的數據
SELECT *
FROM orders
WHERE DAYOFWEEK(order_time) IN (1, 7) -- 星期日和星期六
AND order_time >= '2024-01-01';
6. 處理 NULL 值
-- NULL 值處理
SELECT DAYOFWEEK(NULL) AS result;
-- 結果: NULL-- 過濾 NULL 值
SELECT DAYOFWEEK(order_time) AS day_of_week
FROM orders where order_time is not null;
時區注意事項
重要說明
使用 DAYOFWEEK
函數時需要特別注意時區問題,因為不同的時區可能會影響日期的計算結果:
- 數據庫時區設置: 函數的結果可能受到數據庫服務器時區設置的影響
- 客戶端時區: 客戶端和服務器時區不一致時可能導致結果偏差
- UTC 轉換: Unix 時間戳通常基于 UTC,在轉換為本地時間時需要考慮時區偏移
時區相關示例
-- 顯示當前時區設置
SELECT TIMEZONE();-- 在不同時區下同一時間戳可能返回不同的星期幾
-- 例如:UTC 時間 2024-01-01 00:30:00 (星期一)
-- 在 UTC+8 時區顯示為 2024-01-01 08:30:00 (星期一)
-- 在 UTC-5 時區顯示為 2023-12-31 19:30:00 (星期日)SELECT '2024-01-01 00:30:00' AS utc_time,DAYOFWEEK('2024-01-01 00:30:00') AS day_utc;
建議
- 統一時區: 在應用中保持數據庫和客戶端時區的一致性
- 明確時區: 在處理跨時區數據時,明確指定時區或統一使用 UTC
- 測試驗證: 在不同時區環境下測試函數返回結果的正確性
相關函數
WEEKDAY()
: 返回星期幾(0-6,Monday=0)WEEK()
: 返回一年中的第幾周WEEKOFYEAR()
: 返回一年中的第幾周(ISO 標準)NOW()
: 獲取當前時間戳TIMEZONE()
: 獲取當前時區設置
常見用途
- 業務分析: 分析不同工作日的業務數據分布
- 排班管理: 根據星期幾安排工作計劃
- 數據過濾: 篩選工作日或周末的數據
- 報表統計: 按星期維度進行數據統計和分析
關于 TDengine
TDengine 專為物聯網IoT平臺、工業大數據平臺設計。其中,TDengine TSDB 是一款高性能、分布式的時序數據庫(Time Series Database),同時它還帶有內建的緩存、流式計算、數據訂閱等系統功能;TDengine IDMP 是一款AI原生工業數據管理平臺,它通過樹狀層次結構建立數據目錄,對數據進行標準化、情景化,并通過 AI 提供實時分析、可視化、事件管理與報警等功能。