2010-05-21 82 views

回答

6

最好的方法是:

SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0) 

这是因为在内部,SQL Server将所有日期存储为两个整数,其中第一个日期是***自1900年1月1日起的***天数。(第二个是时间部分,存储作为自午夜以来的秒数。 (SmallDateTime s的秒数或DateTime s的毫秒数)
使用上述表达式更好,因为它避免了所有转换,直接读取并访问日期内部表示中的第一个整数,而无需执行任何处理......两个零在上面的表达式(代表1900年1月1日)中,也是直接利用W/O处理或转换,因为它们与日期1月1900的SQL服务器内部表示完全匹配(作为整数)。

*注意。实际上,你必须跨越日期边界(midnights)的数量才能从一个日期到另一个日期。

+0

在查看回复之前,我已经想清楚了,但这是我走过的路,而且完美无缺。 – 2010-05-25 12:59:45

1

可以使用的功能:

  1. day(date)
  2. month(date)
  3. year(date)
+0

是否还有类似的时间部分功能?像小时(日期),分钟(日期)。谢谢 – curiousBoy 2013-11-25 23:30:25

5

,通过使用convert函数。例如:

select getdate(), convert(varchar(10),getdate(),120) 

结果:

----------------------- ---------- 
2010-05-21 13:43:23.117 2010-05-21 
0
DECLARE @dToday DATETIME 
SET @dToday = CONVERT(nvarchar(20), GETDATE(), 101) 
SELECT @dToday AS Today 

这个上午12:00返回今天的日期: '2010-05-21 00:00:00.000' 然后你可以使用根据需要查询@dToday变量