T-SQL将日期时间修剪到最近的日期?

时间:2009-02-11 19:38:08

标签: sql tsql datetime date-arithmetic

重复 What's the BEST way to remove the time portion of a datetime value (SQL Server)?

我有一个列跟踪使用日期时间创建事物的列,但是我想生成一个按日分组的报表,所以我需要一种方法来清空datetime列的时间组件。

我该怎么做?

8 个答案:

答案 0 :(得分:28)

为什么不直接转换为日期:

select convert(date, getdate())

这会截断日期,而不是截止日期。圆形天做这个:

select convert(date, getdate() + 0.5)

答案 1 :(得分:18)

一种方法是将getdate()更改为您的列名

select dateadd(dd, datediff(dd, 0, getdate())+0, 0)

答案 2 :(得分:5)

这是另一种解决方案:

SELECT CAST( FLOOR( CAST( GETDATE() AS float) ) AS smalldatetime)

答案 3 :(得分:1)

是。有许多格式可供选择,因此我将链接它。

http://library.cirr.com/Microsoft/SQL-Server-v7/html/ca-co_1.htm

如果您希望将帖子隐含的时间归零,可以试试这个:

select cast(convert(varchar, getdate(), 101) as datetime)

答案 4 :(得分:1)

转换(varchar,日期字段/值/等,101)

这是从日期时间获取日期的最简单方法。

答案 5 :(得分:0)

declare @CurrentDate datetime
set @CurrentDate = dateadd(dd, datediff(dd, 0, getdate()), 0)

- 或 -

select dateadd(dd, datediff(dd, 0, MyDateColumn), 0) as DateOnly
from tblX

答案 6 :(得分:0)

在我的搜索中,我遇到了以下解决方案,它只消除了UTC时间,但我发现它很有趣,所以我认为其他人也会这样:

FUNCTION TrimDate(@dt AS DATETIME) RETURNS DATETIME
BEGIN
    RETURN CAST(CAST((@dt - 0.500000038580247) AS INT) AS DATETIME) 
END

我认为它运行得很快,因为它所做的只是舍入和转换。

答案 7 :(得分:0)

我只是将cast(getdate()作为日期)