在 SQL Server 2008中添加了日期数据类型。
将datetime
列转换date
为sargable并且可以在datetime
列上使用索引。
select *
from T
where cast(DateTimeCol as date) = '20130101';
Run Code Online (Sandbox Code Playgroud)
您拥有的另一个选择是改用范围。
select *
from T
where DateTimeCol >= '20130101' and
DateTimeCol < '20130102'
Run Code Online (Sandbox Code Playgroud)
这些查询是同样好还是应该优先于另一个?
我知道 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
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供帮助吗?
我的预期输出将是本周每一天的一列,每周从星期一开始(即:Datefirst 1)。最终,我将在 case 语句中使用它,例如:
CASE
WHEN DateColumn >= DATEADD(day, 1 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) …
Run Code Online (Sandbox Code Playgroud)