SQL Server, like many database systems, often stores date and time information together in a single data type (typically datetime
or datetime2
). However, there are frequent scenarios where you only need the date portion, without the time component. This tutorial explains several methods to extract just the date from a datetime value in SQL Server.
Understanding the Problem
When you query a datetime column, you often get results like 2011-02-25 21:17:33.933
. If you need to perform date-based comparisons or reporting, this time component can be unnecessary and even problematic. You want to isolate the 2011-02-25
portion.
Methods to Extract the Date
Here are several ways to achieve this:
1. Using CAST
to DATE
The simplest and often preferred method is to use the CAST
function to explicitly convert the datetime value to the DATE
data type.
SELECT CAST(GETDATE() AS DATE);
This will return only the date portion of the current datetime. This method is efficient and clear in its intent. It’s generally the best practice when you need the result as a DATE
data type for further calculations or comparisons.
2. Using CONVERT
with Style Code 120
The CONVERT
function offers more control over the output format. You can specify a style code to format the date as a string. Style code 120 represents the yyyy-mm-dd
format.
SELECT CONVERT(VARCHAR(10), GETDATE(), 120);
This method returns the date as a string, which can be useful for display purposes. However, be aware that the result is a string, not a date data type, so it might require conversion back to a date for calculations.
3. Using FLOOR
(Less Common, but Demonstrates Concepts)
While less common for direct date extraction, you can use FLOOR
in conjunction with casting to float and then back to datetime. This method effectively truncates the time portion.
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME);
This approach is more complex and less readable than the CAST
to DATE
or CONVERT
methods. It’s generally not recommended unless you have a specific reason for using it.
4. Using DATEDIFF
and DATEADD
(For Specific Comparison Scenarios)
The DATEDIFF
and DATEADD
functions can be used to extract the date, particularly when you only need the date for comparison purposes.
SELECT DATEADD(d, DATEDIFF(d, 0, GETDATE()), 0);
This code calculates the number of days since the ‘zero’ date (1900-01-01) and then adds that number of days back to the zero date, effectively giving you the date without the time. This is highly optimized for comparison against other dates.
Choosing the Right Method
- For most scenarios where you need a date data type for calculations or comparisons, use
CAST(datetime_column AS DATE)
. This is the cleanest and most efficient approach. - If you need the date as a string for display purposes, use
CONVERT(VARCHAR(10), datetime_column, 120)
. - The
FLOOR
method is generally not recommended due to its complexity. - Use the
DATEDIFF
andDATEADD
combination only when you need the date for efficient comparisons, especially inWHERE
clauses.
By understanding these methods, you can effectively extract the date portion from datetime values in SQL Server and tailor your queries to meet your specific needs.