mssql根据datetime判断该时间是否为本周时间

本周时间的概念是上周六到本周五为一周
比如记录
id name bgTime
1 "test" 2013-08-07 14:12:30
2 "good" 2013-09-27 04:35:30
3 "suine" 2013-09-23 11:12:30
4 "ne" 2013-09-21 11:12:30
5 "sne" 2013-09-22 11:12:30
6 "unine" 2013-09-19 11:12:30
7 "shy" 2012-11-07 14:12:30
now.bgTime=2013-09-23 11:12:30
selsect id,name from a.table where bgTime in {本周}
理想结果:

2 "good" 2013-09-27 04:35:30
3 "suine" 2013-09-23 11:12:30
4 "ne" 2013-09-21 11:12:30
5 "sne" 2013-09-22 11:12:30

该回答引用ChatGPT

要根据 MSSQL 中的 datetime 判断该时间是否为本周时间,可以使用以下步骤:


确定当前日期所在周的起始日期和结束日期。可以使用 DATEPART() 函数获取当前日期是本周的第几天(1 表示星期天,2 表示星期一,以此类推),然后根据这个信息计算出本周的起始日期和结束日期。假设我们的一周是从周六开始算的,则本周的起始日期为本周日减去六天,结束日期为本周六。

DECLARE @now DATETIME
SET @now = '2013-09-23 11:12:30'

DECLARE @startOfWeek DATETIME
SET @startOfWeek = DATEADD(DAY, -DATEPART(WEEKDAY, @now) + 1, @now)

DECLARE @endOfWeek DATETIME
SET @endOfWeek = DATEADD(DAY, 7 - DATEPART(WEEKDAY, @now), @now)

使用起始日期和结束日期来筛选符合条件的记录。可以使用 BETWEEN 运算符来判断某个日期是否在指定的区间内。

SELECT id, name, bgTime
FROM a.table
WHERE bgTime BETWEEN DATEADD(DAY, -6, @startOfWeek) AND @endOfWeek

完整的 SQL 查询语句如下:

DECLARE @now DATETIME
SET @now = '2013-09-23 11:12:30'

DECLARE @startOfWeek DATETIME
SET @startOfWeek = DATEADD(DAY, -DATEPART(WEEKDAY, @now) + 1, @now)

DECLARE @endOfWeek DATETIME
SET @endOfWeek = DATEADD(DAY, 7 - DATEPART(WEEKDAY, @now), @now)

SELECT id, name, bgTime
FROM a.table
WHERE bgTime BETWEEN DATEADD(DAY, -6, @startOfWeek) AND @endOfWeek

该查询语句会返回所有 bgTime 在本周时间范围内的记录,即 id 为 2、3、4、5 的记录。注意,这里假设一周的起始日是周六,如果起始日不同,需要相应地调整查询语句中的计算逻辑。