21

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

I have a column that tracks when things are created using a datetime, but I'd like to generate a report that groups them by day, so I need a way of nulling out the time component of a datetime column.

How do I do this?

Community
  • 1
  • 1
Allain Lalonde
  • 91,574
  • 70
  • 187
  • 238

8 Answers8

42

Why not convert straight to date:

select convert(date, getdate())

This truncates days, not rounds. To round Days do this:

select convert(date, getdate() + 0.5)
jordanwillis
  • 10,449
  • 1
  • 37
  • 42
pieman72
  • 429
  • 1
  • 4
  • 3
20

One way is to change getdate() to your column name,

select dateadd(dd, datediff(dd, 0, getdate())+0, 0)
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
SQLMenace
  • 132,095
  • 25
  • 206
  • 225
  • I don't think the +0 is required (at least using sql server 2012+). This is the most creative and useful answer I've seen. – Rolan Apr 09 '18 at 07:55
5

Here's another solution:

SELECT CAST( FLOOR( CAST( GETDATE() AS float) ) AS smalldatetime)
richardtallent
  • 34,724
  • 14
  • 83
  • 123
3

This is a simple way to get the date (as a string) from a datetime:

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

But note that ordering on this field will be alphabetical rather than by date since it's now a string

Zach Smith
  • 8,458
  • 13
  • 59
  • 133
notnot
  • 4,472
  • 12
  • 46
  • 57
1

I simply do cast(getdate() as date)

C_BB
  • 11
  • 1
1

Yes. There are many formats to choose from so I'll link it instead.

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

If you wish to zero out the time like your post implies, you can try this:

select cast(convert(varchar, getdate(), 101) as datetime)
Austin Salonen
  • 49,173
  • 15
  • 109
  • 139
0
declare @CurrentDate datetime
set @CurrentDate = dateadd(dd, datediff(dd, 0, getdate()), 0)

--or--

select dateadd(dd, datediff(dd, 0, MyDateColumn), 0) as DateOnly
from tblX
Gordon Bell
  • 13,337
  • 3
  • 45
  • 64
0

In my searches I came across the following solution, it strips time out of UTC time only, but I found it interesting, so I thought someone else would too:

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

I would presume that it runs quickly since all it's doing is rounding and casting.

Allain Lalonde
  • 91,574
  • 70
  • 187
  • 238