Aby dodać lub odejmować dni od daty w SQL Serwerze wystarczy użyć znaków plus minus.
SELECT GETDATE() AS 'Dzis',
GETDATE() + 14 AS '14 Dni później',
GETDATE() - 14 AS '14 Dni wcześniej'
Rezultat:
Dzis 14 Dni później 14 Dni wcześniej
----------------------- ----------------------- -----------------------
2013-06-28 20:42:35.753 2013-07-12 20:42:35.753 2013-06-14 20:42:35.753
Jednakże jeśli musisz dodać lata/miesiące do daty musisz użyć funkcji “DATEADD()”
Składnia: DATEADD( cześć dnia, liczba, data)
Gdzie, część dnia = year, quarter, month, day…
number = liczba całkowita, która określa liczbę wartość, która ma być dodana
data = data
Oto użycie tej funkcji.
SELECT GETDATE(), 'Dziś'
UNION ALL
SELECT DATEADD(DAY, 14, GETDATE()), '10 Dni później'
UNION ALL
SELECT DATEADD(DAY, -14, GETDATE()), '10 Dni wcześniej'
UNION ALL
SELECT DATEADD(MONTH, 1, GETDATE()), 'Następny miesiąc'
UNION ALL
SELECT DATEADD(MONTH, -1, GETDATE()), 'Poprzedni miesiąc'
UNION ALL
SELECT DATEADD(YEAR, 1, GETDATE()), 'Następny rok'
UNION ALL
SELECT DATEADD(YEAR, -1, GETDATE()), 'Poprzedni rok'
Rezultat:
----------------------- -----------------
2013-06-28 20:45:28.973 Dziś
2013-07-12 20:45:28.973 10 Dni później
2013-06-14 20:45:28.973 10 Dni wcześniej
2013-07-28 20:45:28.973 Następny miesiąc
2013-05-28 20:45:28.973 Poprzedni miesiąc
2014-06-28 20:45:28.973 Następny rok
2012-06-28 20:45:28.973 Poprzedni rok
Możesz także odejmować bezpośrednio daty.
SELECT GETDATE() - GETDATE(), 'DATA ZERO'
Jak widać odejmując datę dzisiejszą od daty dzisiejszej otrzymuje wartość domyślną “1900-01-01”.
----------------------- ---------
1900-01-01 00:00:00.000 DATA ZERO
Ogólnie dodawanie,odejmowanie dat do innych dat nie jest za bardzo użyteczne. Oto przykład, który ukazuje co dokładnie w takim wypadku my dodajemy.
SELECT DATEADD(YEAR, -100, GETDATE()),' + '
,GETDATE(),GETDATE() + DATEADD(YEAR, -100, GETDATE()),
'DODAWANIE DAT BEZPOSREDNIO'