T-SQL获得DateTime类型的日期部分

有时候我们过滤一个时间仅仅需要精确到”日期“,此时我们通常不想考虑”时、分、秒“。这个SQL语句应该怎么写呢?比如我们想查询2010-01-01到2010-03-01之间的数据,可能我们写的查询语句是:

SELECT * FROM Product WHERE CreateDate BETWEEN '2010-01-01' AND '2010-03-01'

而如果数据库中存储的数据是:

ProductName CreateDate

Product1       2010-01-01 11:30:29.567

那么上面的查询语句得到不到我们想要的数据。我们希望排除”时间“部分的干扰。

那么怎么写呢?先看看下面这句的效果:

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

这条查询语句能够得到当前”日期“,时间部分为00:00:00.000。

小小分析一下上面的查询语句:
--0表示1900-01-01 00:00:00.000
SELECT DATEADD(dd, 0, 0)

--现在距离1900-01-01已经有多少天?
SELECT DATEDIFF(dd, 0, GETDATE())

--1900-01-01加上40279天 = 2010-4-13, 于是我们得到结果
SELECT DATEADD(dd, 0, 40279)

于是我们可以这样写:

SELECT * FROM Product WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, CreateDate)) BETWEEN '2010-01-01' AND '2010-03-01'

这个技巧来自于:http://blogs.x2line.com/al/archive/2006/02/17/1458.aspx,我当时想要DatePart来解决,但是没有能够成功。


转自:http://blog.havebb.com/b/post/tsql-get-date-part.aspx

你可能感兴趣的:(T-SQL,数据库/服务器)