Basic Date Functions

GETDATE()
Returns the current date and time
SELECT GETDATE() AS CurrentDateTime -- Returns: 2024-10-29 14:30:45.123
DATEADD()
Adds or subtracts a specified time interval
-- Add 7 days to current date SELECT DATEADD(day, 7, GETDATE()) AS OneWeekFromNow -- Subtract 1 month SELECT DATEADD(month, -1, GETDATE()) AS OneMonthAgo -- Common intervals: year, quarter, month, week, day, hour, minute, second
DATEDIFF()
Calculates the difference between two dates
-- Calculate days between dates SELECT DATEDIFF(day, '2024-01-01', '2024-12-31') AS DaysDifference -- Returns: 365 -- Calculate years between dates SELECT DATEDIFF(year, '2020-01-01', '2024-10-29') AS YearsDifference -- Returns: 4
Date Parts Extraction
DATEPART()
Extracts specific parts of a date
SELECT
DATEPART(year, GETDATE()) AS CurrentYear,
DATEPART(month, GETDATE()) AS CurrentMonth,
DATEPART(day, GETDATE()) AS CurrentDay,
DATEPART(hour, GETDATE()) AS CurrentHour
YEAR(), MONTH(), DAY()
Shortcuts for common date parts
SELECT
YEAR(GETDATE()) AS CurrentYear,
MONTH(GETDATE()) AS CurrentMonth,
DAY(GETDATE()) AS CurrentDay
Date Formatting
FORMAT()
Formats dates using standard or custom patterns
-- Standard date format SELECT FORMAT(GETDATE(), 'd') AS ShortDate -- 10/29/2024 SELECT FORMAT(GETDATE(), 'D') AS LongDate -- Tuesday, October 29, 2024 SELECT FORMAT(GETDATE(), 'MM/dd/yyyy') AS Custom -- 10/29/2024
CONVERT()
Converts dates to different formats using style codes
SELECT
CONVERT(varchar, GETDATE(), 101) AS USFormat, -- 10/29/2024
CONVERT(varchar, GETDATE(), 103) AS BritishFormat -- 29/10/2024
Practical Examples
First and Last Day of Month
-- First day of current month SELECT DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) AS FirstDayOfMonth -- Last day of current month SELECT DATEADD(day, -1, DATEADD(month, DATEDIFF(month, 0, GETDATE()) + 1, 0)) AS LastDayOfMonth
Business Days Calculation
CREATE FUNCTION dbo.CalculateBusinessDays
(
@StartDate datetime,
@EndDate datetime
)
RETURNS int
AS
BEGIN
DECLARE @Days int
SELECT @Days = DATEDIFF(day, @StartDate, @EndDate) + 1
-- Subtract weekends
SELECT @Days = @Days -
(SELECT COUNT(*)
FROM (
SELECT TOP (DATEDIFF(day, @StartDate, @EndDate) + 1)
DATEADD(day, ROW_NUMBER() OVER (ORDER BY a.object_id) - 1, @StartDate) AS Date
FROM sys.objects a
CROSS JOIN sys.objects b
) AS Dates
WHERE DATEPART(weekday, Date) IN (1, 7)) -- 1 = Sunday, 7 = Saturday
RETURN @Days
END
Age Calculation
CREATE FUNCTION dbo.CalculateAge
(
@BirthDate datetime,
@CurrentDate datetime
)
RETURNS int
AS
BEGIN
RETURN YEAR(@CurrentDate) - YEAR(@BirthDate) -
CASE
WHEN (MONTH(@CurrentDate) < MONTH(@BirthDate)) OR
(MONTH(@CurrentDate) = MONTH(@BirthDate) AND DAY(@CurrentDate) < DAY(@BirthDate))
THEN 1
ELSE 0
END
END
Best Practices
- Use Appropriate Data Types
- Use
datetime2for new development (more precise, larger date range) - Use
datewhen you only need the date portion - Use
timewhen you only need the time portion
- Use
- Index Optimization
- Avoid using functions on indexed columns in WHERE clauses
- Instead of:
WHERE YEAR(DateColumn) = 2024 - Use:
WHERE DateColumn >= '2024-01-01' AND DateColumn < '2025-01-01'
- Time Zone Handling
- Store dates in UTC using
GETUTCDATE() - Convert to local time only for display
- Consider using
DATETIMEOFFSETfor time zone awareness
- Store dates in UTC using
- Performance Tips
- Cache date calculations when possible
- Use computed columns for frequently accessed date parts
- Consider partitioning large tables by date ranges
Common Pitfalls to Avoid
1. Implicit Conversions
-- Bad (implicit conversion)
WHERE DateColumn = '2024-10-29'
-- Good (explicit conversion)
WHERE DateColumn = CAST('2024-10-29' AS datetime2)
2. Function Usage in WHERE Clauses
-- Bad (non-sargable) WHERE DATEADD(day, -7, GETDATE()) <= OrderDate -- Good (sargable) WHERE OrderDate >= DATEADD(day, -7, GETDATE())
3. Time Zone Issues
-- Consider time zones when comparing dates WHERE OrderDate >= @StartDate AT TIME ZONE 'UTC'
Remember to test these functions with your specific use case and data volume to ensure optimal performance.
| Read More Topics |
| Basic SQL knowledge for programmer and developers |
| PostgreSQL cheat sheet |
| SQL interview questions for freshers |





