- 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 | +-----------------------------+