📜  sql week 开始日期 - SQL (1)

📅  最后修改于: 2023-12-03 15:35:05.439000             🧑  作者: Mango

SQL Week 开始日期

在 SQL 开发中,日期是非常重要的一部分。SQL Week 开始日期是指按照 ISO 标准,每周从周一开始计算,周一为该周的第一天,周日为该周的最后一天,每年第一周要满足至少有4天在当年中,并以第一个含有周四的日期所在的星期作为第一周。

在 SQL 中,有许多函数和关键字可以让我们轻松地获取 SQL Week 开始日期。下面将会介绍其中几种常用的方法。

方法一:使用 DATEPART 函数

DATEPART 函数可以获取一个日期的年份、月份、日份、小时、分钟、秒钟等各个部分。我们可以使用 DATEPART 函数获取 SQL Week 开始日期的年份、周数和星期几,然后再通过一些计算得到该周的开始日期。

DECLARE @input_date DATE = '2022-01-08';

SELECT DATEADD(DAY, 1-DATEPART(WEEKDAY, @input_date), @input_date) AS sql_week_start_date;

输出结果为:

| sql_week_start_date | |---------------------| | 2022-01-03 |

解释一下,首先我们定义了一个变量 @input_date,其值为 '2022-01-08',即要查询的日期。然后我们使用 DATEPART 函数获取该日期所在的星期、星期几以及年份:

  • DATEPART(WEEK, @input_date) 表示获取 @input_date 所在的周数,其值为 2。
  • DATEPART(WEEKDAY, @input_date) 表示获取 @input_date 所在的星期几,其值为 7。
  • YEAR(@input_date) 表示获取 @input_date 所在的年份,其值为 2022。

然后我们再通过一些计算得到该周的开始日期:

  • DATEADD(DAY, 1-DATEPART(WEEKDAY, @input_date), @input_date) 表示先将 @input_date 所在的日期往前推 7 天(因为这里是周日,需要将日期往前推到周一),然后再加上 1 天,就得到了该周的开始日期。
方法二:使用 SET DATEFIRST

SET DATEFIRST 语句可以设置每周的第一天是周几。默认情况下,SQL Server 将周日设为每周的第一天,但是我们可以使用 SET DATEFIRST 语句将其设置成其他天。

SET DATEFIRST 1; -- 设置每周的第一天为周一

DECLARE @input_date DATE = '2022-01-08';

SELECT DATEADD(DAY, 1-DATEPART(WEEKDAY, @input_date), @input_date) AS sql_week_start_date;

输出结果与方法一相同。

方法三:使用 DATE_TRUNC 函数(PostgreSQL 等支持)

DATE_TRUNC 函数可以将一个日期截断到指定的精度,例如:将 '2022-01-08' 截断到周,即得到 '2022-01-03'。各个数据库对 DATE_TRUNC 函数的实现有所不同,这里以 PostgreSQL 为例。

SELECT DATE_TRUNC('week', '2022-01-08'::TIMESTAMP) AS sql_week_start_date;

输出结果为:

| sql_week_start_date | |---------------------| | 2022-01-03 00:00:00 |

解释一下,我们使用 DATE_TRUNC 函数将 '2022-01-08' 截断到周,就得到了该周的开始日期。注意,这里需要将日期转换成 TIMESTAMP 类型才能使用 DATE_TRUNC 函数。

以上就是获取 SQL Week 开始日期的几种常用方法,开发人员可以根据实际情况选择其中合适的方法。