Understanding DATEADD in Different Databases
Each database system has its own way of adding dates. Here's how to use them effectively:
SQL Server (DATEADD)
SELECT DATEADD(day, 30, GETDATE()) as future_date;
SELECT
order_id,
order_date,
DATEADD(month, 3, order_date) as delivery_date
FROM
MySQL (DATE_ADD)
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 WEEK) as next_week;
SELECT
employee_name,
hire_date,
DATE_ADD(hire_date, INTERVAL 2 YEAR) as anniversary
FROM
PostgreSQL (+ interval)
SELECT current_timestamp + INTERVAL '6 hours' as future_time;
SELECT
event_name,
start_time,
start_time + INTERVAL '45 minutes' as end_time
FROM
For more examples and SQL tools, visit our AI SQL Tools page.
Common Use Cases
1. Subscription Management
SELECT
customer_id,
subscription_start,
CASE subscription_type
WHEN 'Monthly' THEN DATE_ADD(subscription_start, INTERVAL 1 MONTH)
WHEN 'Quarterly' THEN DATE_ADD(subscription_start, INTERVAL 3 MONTH)
WHEN 'Annual' THEN DATE_ADD(subscription_start, INTERVAL 1 YEAR)
END as subscription_end,
subscription_type
FROM subscriptions
WHERE is_active = 1
2. Order Processing
SELECT
o.order_id,
o.order_date,
DATE_ADD(o.order_date, INTERVAL st.processing_days DAY) as estimated_delivery
FROM orders o
JOIN shipping_types st ON o.shipping_type_id = st.id
WHERE o.status = 'Processing'
3. Invoice Due Dates
SELECT
invoice_number,
issue_date,
DATE_ADD(issue_date, INTERVAL 30 DAY) as due_date,
amount,
CASE
WHEN CURRENT_DATE > DATE_ADD(issue_date, INTERVAL 30 DAY)
THEN 'Overdue'
ELSE 'Current'
END as status
FROM
Advanced Date Calculations
1. Multiple Intervals
SELECT
event_date,
DATE_ADD(
DATE_ADD(event_date, INTERVAL 2 WEEK),
INTERVAL 3 DAY
) as followup_date
FROM
2. Business Days
CREATE FUNCTION AddBusinessDays(start_date DATE, num_days INT)
RETURNS DATE
BEGIN
DECLARE current_date DATE;
SET current_date = start_date;
WHILE num_days > 0 DO
SET current_date = DATE_ADD(current_date, INTERVAL 1 DAY);
IF DAYOFWEEK(current_date) NOT IN (1, 7) THEN
SET num_days = num_days - 1;
END IF;
END WHILE;
RETURN current_date;
END
3. Date Range Analysis
WITH RECURSIVE date_ranges AS (
SELECT
start_date,
DATE_ADD(start_date, INTERVAL 6 DAY) as end_date
FROM (SELECT MIN(date) as start_date FROM sales) d
UNION ALL
SELECT
DATE_ADD(start_date, INTERVAL 7 DAY),
DATE_ADD(DATE_ADD(start_date, INTERVAL 7 DAY), INTERVAL 6 DAY)
FROM date_ranges
WHERE start_date < (SELECT MAX(date) FROM sales)
)
SELECT
start_date,
end_date,
COUNT(s.sale_id) as sales_count,
SUM(s.amount) as total_sales
FROM date_ranges dr
LEFT JOIN sales s ON s.date BETWEEN dr.start_date AND dr.end_date
GROUP BY start_date, end_date
ORDER BY
Best Practices
Time Zone Handling
SELECT
event_utc,
CONVERT_TZ(
DATE_ADD(event_utc, INTERVAL 24 HOUR),
'UTC',
user_timezone
) as followup_local_time
FROM
Data Validation
SELECT
order_date,
CASE
WHEN order_date > CURRENT_DATE
THEN NULL
ELSE DATE_ADD(order_date, INTERVAL shipping_days DAY)
END as valid_delivery_date
FROM
For more optimization tips, check out our SQL Query Optimization Guide.
FAQs
Q: How do I handle leap years? A: Database systems automatically handle leap year calculations in date functions.
Q: Can I add fractional intervals? A: Yes, you can add fractional intervals using HOUR, MINUTE, or SECOND units.
Explore more AI-powered SQL tools at AI2SQL.