20

删除日期时间值(SQL Server)的时间部分的最佳方法是什么

我有一列可以跟踪使用日期时间创建事物的时间,但我想生成一个按天对它们进行分组的报告,因此我需要一种方法来消除日期时间列的时间部分。

我该怎么做呢?

4

8 回答 8

40

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

select convert(date, getdate())

这会截断天数,而不是轮数。要舍入 Days,请执行以下操作:

select convert(date, getdate() + 0.5)
于 2012-01-05T20:24:47.577 回答
19

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

select dateadd(dd, datediff(dd, 0, getdate())+0, 0)
于 2009-02-11T19:43:02.860 回答
5

这是另一个解决方案:

SELECT CAST( FLOOR( CAST( GETDATE() AS float) ) AS smalldatetime)
于 2009-07-27T21:58:53.383 回答
2

这是从日期时间获取日期(作为字符串)的简单方法:

convert(varchar, <the date field/value/etc>, 101)

但请注意,此字段的排序将按字母顺序而不是按日期,因为它现在是一个字符串

于 2009-02-11T19:40:28.887 回答
1

是的。有多种格式可供选择,因此我将其链接起来。

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

如果您希望像您的帖子所暗示的那样将时间归零,您可以试试这个:

select cast(convert(varchar, getdate(), 101) as datetime)
于 2009-02-11T19:40:20.243 回答
1

我只是做 cast(getdate() as date)

于 2018-05-17T18:14:59.247 回答
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
于 2009-02-11T19:43:12.750 回答
0

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

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

我认为它运行得很快,因为它所做的只是四舍五入和铸造。

于 2009-02-11T19:45:33.163 回答