DATEADD¶
Adds or subtracts an interval to DATE
or DATETIME
value.
Note
Blue does not support the INTERVAL
ANSI syntax. Use DATEADD
to add or subtract date intervals.
Syntax¶
DATEADD( interval, number, date_expr )
interval ::=
YEAR | YYYY | YY
| QUARTER | QQ | Q
| MONTH | MM | M
| DAYOFYEAR | DOY | DY | Y
| DAY | DD | D
| WEEK | WK | WW
| HOUR | HH
| MINUTE | MI | N
| SECOND | SS | S
| MILLISECOND | MS
Arguments¶
Parameter |
Description |
---|---|
|
An interval representing a date part. See the table below or the syntax reference above for valid date parts |
|
An integer expression |
|
A |
Valid date parts¶
Date part |
Shorthand |
Definition |
---|---|---|
|
|
Year (0 - 9999) |
|
|
Quarter (1-4) |
|
|
Month (1-12) |
|
|
Days (1-365) |
|
|
Week of the year (1-52) |
|
|
Hour (0-23) |
|
|
Minute (0-59) |
|
|
Seconds (0-59) |
|
|
Milliseconds (0-999) |
Note
The first day of the week is Sunday, when used with
weekday
.
Returns¶
If
HOUR
,MINUTE
,SECOND
, orMILLISECOND
are added to aDATE
, the return type will beDATETIME
.For all other date parts, the return type is the same as the argument supplied.
Notes¶
Use negative numbers to subtract from a date
Use
DATEADD
instead of manually figuring out dates. For example, adding a day to February 28th 2020 should result in February 29th 2020. Adding another day should result in March 1st, not February 30th.
Examples¶
For these examples, consider the following table and contents:
CREATE TABLE cool_dates(name TEXT, d DATE, dt DATETIME);
INSERT INTO cool_dates VALUES ('Marty McFly goes back to this time','1955-11-05','1955-11-05 01:21:00.000')
, ('Marty McFly came from this time', '1985-10-26', '1985-10-26 01:22:00.000')
, ('Vesuvius erupts', '79-08-24', '79-08-24 13:00:00.000')
, ('1997 begins', '1997-01-01', '1997-01-01')
, ('1997 ends', '1997-12-31','1997-12-31 23:59:59.999');
Add a quarter to each date¶
master=> SELECT d as original_date, DATEADD(QUARTER, 1, d) as next_quarter FROM cool_dates;
original_date | next_quarter
--------------+-------------
1955-11-05 | 1956-02-05
1985-10-26 | 1986-01-26
0079-08-24 | 0079-11-24
1997-01-01 | 1997-04-01
1997-12-31 | 1998-03-31
Getting next month’s date¶
master=> SELECT CURRENT_DATE,DATEADD(MONTH, 1, CURRENT_DATE);
date | dateadd
-----------+-----------
2019-12-07 | 2020-01-07
Filtering +- 50 years from a specific date¶
master=> SELECT name, dt as datetime FROM cool_dates
. WHERE dt BETWEEN DATEADD(YEAR,-50,'1955-06-01') AND DATEADD(YEAR,50,'1955-06-01');
name | datetime
-----------------------------------+--------------------
Marty McFly goes back to this time | 1955-11-05 01:21:00
Marty McFly came from this time | 1985-10-26 01:22:00
1997 begins | 1997-01-01 00:00:00
1997 ends | 1997-12-31 23:59:59
Check if a year is a leap year¶
Returns TRUE
if this is a leap year - because adding a day to February 28th is February 29th on a leap year.
-- Should return true for 2020:
master=> SELECT DATEPART(MONTH, DATEADD(DAY,1,'2020-02-28')) = 2 AS "2020 is a leap year";
2020 is a leap year
-------------------
true
-- Should return false for 2021:
master=> SELECT DATEPART(MONTH, DATEADD(DAY,1,'2021-02-28')) = 2 AS "2021 is a leap year";
2021 is a leap year
-------------------
false