大家好,

在相当长的一段时间里,我一直在困惑使用T-SQL构造DateTime SQL类型。本质上,我想将DateTime值设置为2008-12-1 14:30:12并将其设置为2008-12-1 00:00:00。我们为报表运行的许多查询都在WHERE子句中使用日期值,但我要么将日期的开始和结束日期设置为天,然后使用BETWEEN,要么找到其他方法。

目前,我正在使用以下内容:WHERE CAST(CONVERT(VARCHAR, [tstamp], 102) AS DATETIME) = @dateParam
但是,这似乎有些笨拙。我希望会有更简单的东西CAST([tstamp] AS DATE)
在线上的某些地方建议使用DATEPART()函数,但最后我得到的是这样的东西:
WHERE DATEPART(year, [tstamp]) = DATEPART(year, @dateParam)AND DATEPART(month, [tstamp]) = DATEPART(month, @dateParam)AND DATEPART(day, [tstamp]) = DATEPART(day, @dateParam)
也许我太在意小事了,如果是,请告诉我。我只是想确保我正在写的东西尽可能高效。我想消除任何薄弱环节。

有什么建议?

谢谢,
C



感谢大家的宝贵意见。很多有用的信息。我将改变我们的功能,以消除运算符(operator)左侧的功能。尽管我们的大多数日期列都不使用索引,但它可能仍然是更好的做法。

最佳答案

这对性能非常不利,请看Only In A Database Can You Get 1000% + Improvement By Changing A Few Lines Of Code

运算符(operator)左侧的功能不良

这是你需要做的

declare @d datetime
select @d =  '2008-12-1 14:30:12'

where tstamp >= dateadd(dd, datediff(dd, 0, @d)+0, 0)
and tstamp < dateadd(dd, datediff(dd, 0, @d)+1, 0)

运行此命令以查看其作用
select dateadd(dd, datediff(dd, 0, getdate())+1, 0)
select dateadd(dd, datediff(dd, 0, getdate())+0, 0)

关于sql - MS SQL日期,没有时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/467103/

10-09 09:45