我了解 SQL Server 2005 不支持DATE
,因此无法将日期时间转换为日期。
我想要做的是列出当前一周一整天内具有日期时间的所有记录。
所以我需要在本周的星期一创建的所有记录忽略时间戳。目前我正在使用以下内容,它确实显示了本周的周一至周五,但包括时间戳,这意味着我将看到不同的输出,具体取决于查询的运行时间:
set datefirst 1
select
DATEADD(day, 1 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as Monday,
DATEADD(day, 2 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as Tuesday,
DATEADD(day, 3 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as wednesday,
DATEADD(day, 4 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as Thursday,
DATEADD(day, 5 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as Friday
有人可以帮忙吗?
我的预期输出将是当周每一天的一列,该周从星期一开始(即:Datefirst 1)。最终,我将在一个案例陈述中使用它,例如:
CASE
WHEN DateColumn >= DATEADD(day, 1 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) and DateColumn < DATEADD(day, 2 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE()))
THEN IntegerColumn
ELSE 0
END AS Monday
...重复一周中的每一天。我需要容纳整个星期一添加的 IntegerColumn 值。如果在星期一的几个小时内没有出现 DateColumn 条目,则显示零。
今天的日期是 2016-02-11,此查询返回
2016-02-11 00:00:00.000
:然后可以将其包含在
DATEADD
语句中:这将给出以下输出:
此查询返回星期日的日期(
2016-02-06
本周):它可以与此查询一起使用,并提供相同的输出:
对于日期为星期一的记录,可以使用此查询:
它输出日期大于或等于星期一 00:00 和星期二之前 00:00 的行。
使用起来
date >= '20160101 00:00' and date < '20160102 00:00'
比BETWEEN
. 请参阅:为什么我的查询搜索日期时间不匹配?完整示例(SQL Fiddle):
查询一:
查询 2: