- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 截斷表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表資料
- SQL - 約束
- SQL 查詢
- SQL - INSERT 查詢
- SQL - SELECT 查詢
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查詢
- SQL - DELETE 查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布林 (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自連線
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 金鑰
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 組合鍵
- SQL - 備選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - UNIQUE 索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - MIN & MAX
- SQL - NULL 函式
- SQL - CHECK 約束
- SQL - DEFAULT 約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - DATE_BUCKET() 函式
SQL 的 DATE_BUCKET() 函式允許您將資料分組到對應於固定時間段的組中。根據提供給函式的引數,它返回標記每個日期時間儲存桶開始的日期時間值。
日期儲存桶函式顧名思義,計算具有單個定義大小的日期儲存桶。如果向函式提供日期和儲存桶大小,則該函式將返回儲存該日期的儲存桶的起始日期。
語法
以下是 SQL DATE_BUCKET() 函式的語法:
DATE_BUCKET (datepart, number, date, origin)
引數
此函式接受四個引數。下面將討論相同的引數:
datepart − 用於與數字一起使用的日期部分。例如,年、分鐘、小時等。
number − 這是一個整數,它將決定與 datepart 引數組合的儲存桶寬度。它應該是一個正整數,因為它表示從原點時間開始的 datepart 儲存桶的寬度。
date − DATE_BUCKET 接受表示式、列表達式或使用者定義的日期變數,如果它們解析為以下任何資料型別,例如 date、datetime、datetime2、datetimeoffset、smalldatetime、time。
origin − 原點資料型別應與日期引數的資料型別匹配。如果未為函式指定原點值,則 DATE_BUCKET 使用預設原點日期值。
示例
讓我們來看一下 SQL DATE_BUCKET() 函式的以下示例,其中寬度為 1 天,使用以下查詢:
DECLARE @date date = '2023-02-21', @origin date = '2023-02-05'; SELECT DATE_BUCKET(DAY, 1, @date, @origin);
輸出
當我們執行上面的查詢時,輸出如下:
+------------+ | Result | +------------+ | 2023-02-21 | +------------+
示例
這是另一種情況,我們將使用以下查詢分別將引數遞增到 2、3、4:
DECLARE @date date = '2023-02-21', @origin date = '2023-02-05'; SELECT DATE_BUCKET(day, 1, @date, @origin) AS "1 day", DATE_BUCKET(day, 2, @date, @origin) AS "2 days", DATE_BUCKET(day, 3, @date, @origin) AS "3 days", DATE_BUCKET(day, 4, @date, @origin) AS "4 days";
輸出
查詢執行後,將生成如下所示的輸出:
+------------+------------+------------+------------+ | 1day | 2 days | 3 days | 4 days | +------------+------------+------------+------------+ | 2023-02-21 | 2023-02-21 | 2023-02-20 | 2023-02-21 | +------------+------------+------------+------------+
示例
在下面的示例中,我們將設定一個 7 天的寬度,但是 @date 和 @origin 之間只剩下 5 天了,讓我們看看使用以下查詢的結果:
DECLARE @date date = '2023-02-21', @origin date = '2023-02-17'; SELECT DATE_BUCKET(day, 7, @date, @origin) AS OriginDate;
輸出
執行上述查詢後,輸出將顯示如下:
+------------+ | OriginDate | +------------+ | 2023-02-17 | +------------+
示例
讓我們來看另一個場景,我們將使用 7 天的寬度,並增加兩個日期之間的間隔,並使用以下查詢檢查結果:
DECLARE @date date = '2023-02-21', @origin date = '2023-02-10'; SELECT DATE_BUCKET(day, 7, @date, @origin) AS Result;
輸出
當查詢執行時,將生成如下所示的輸出:
+------------+ | Result | +------------+ | 2023-02-17 | +------------+
示例
讓我們來看另一個示例,我們將使用使用者定義的變數作為 number 和 date 的引數,並透過執行以下查詢來檢查結果:
DECLARE @days int = 365,
@datetime datetime2 = '2023-02-21 18:03:59.8684429';;
SELECT Date_Bucket(DAY, @days, @datetime) AS Result;
輸出
上面查詢的輸出如下所示:
+-----------------------------+ | Result | +-----------------------------+ | 2022-12-02 00:00:00.0000000 | +-----------------------------+
示例
在下面的示例中,我們將使用 SYSDATETIME() 作為日期,使用以下查詢:
SELECT Date_Bucket(WEEK, 08, SYSDATETIME()) AS Result;
輸出
查詢執行後,將生成如下所示的輸出:
+-----------------------------+ | Result | +-----------------------------+ | 2023-02-13 00:00:00.0000000 | +-----------------------------+
示例
這是另一種情況,我們將使用 SYSDATETIME() 和數字表達式 (07/2) 作為 number 和 date 的引數,使用以下查詢:
SELECT Date_Bucket(WEEK,(07/2), SYSDATETIME()) AS Result;
輸出
執行上述查詢後,將生成如下所示的輸出:
+-----------------------------+ | Result | +-----------------------------+ | 2023-02-06 00:00:00.0000000 | +-----------------------------+
示例
考慮以下示例,我們將使用非預設原點值來生成 date_bucket,使用以下查詢:
Declare @date datetime2 = '2023-02-21 11:34:22'; declare @origin datetime2 = '2023-01-01 00:00:00'; Select DATE_BUCKET(HOUR, 3, @date, @origin) AS Result;
輸出
執行上述查詢後,將生成如下所示的輸出:
+-----------------------------+ | Result | +-----------------------------+ | 2023-02-21 09:00:00.0000000 | +-----------------------------+