SQL DATE_BUCKET() 函数

SQL DATE_BUCKET() 函数

SQLDATE_BUCKET() 函数可以将数据分组成对应于固定时间段的组。根据函数提供的参数,它返回标记每个日期桶开始的日期时间值。

正如其名称所示,Date Bucket 函数计算具有单个定义大小的日期桶。如果提供了日期和桶大小,函数将返回包含该日期的桶的起始日期。

语法

SQL DATE_BUCKET() 函数的语法如下 –

DATE_BUCKET (datepart, number, date, origin)

参数

此函数接受四个参数。以下是详细讨论:

  • datepart - 与数字一起使用的日期部分。例如,年、分钟、小时等。

  • number - 一个整数,用于决定与datepart参数组合的桶的宽度。它应该是一个正整数值,因为它代表日期部分桶的宽度,从原始时间起计算。

  • date - DATE_BUCKET接受一个表达式、列表达式或用户定义变量作为日期,如果它们解析为以下数据类型之一,如date、datetime、datetime2、datetimeoffset、smalldatetime、time。

  • origin - 原始数据类型应与日期参数的数据类型匹配。如果没有为函数指定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 |
+------------+

示例

让我们看另一个例子,在这个例子中,我们将使用用户定义的变量作为数字、日期的参数,并通过运行以下查询来检查结果:

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)作为数值和日期的参数。

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程