Kolejną istotną grupą wbudowanych funkcji skalarnych są obiekty związane z przetwarzaniem typów danych daty i czasu.
YEAR ( data ), MONTH ( data ), DAY ( data ) – dokonują ekstraktu z daty, odpowiednio roku, miesiąca oraz dnia.
-- ekstrakt poszczególnych części daty
SELECT YEAR ( '2013-02-12' ) as Rok,
MONTH( '2013-02-12' ) as Miesiac,
DAY ( '2013-02-12' ) as Dzien
Najczęściej stosowane funkcje zwracające date i czas systemowy to GETDATE() oraz SYSDATETIME(). Są to funkcje nie przyjmujące żadnych argumentów i zwracają po prostu bieżącą datę i czas systemowy.
-- funkcje zwracające aktualny czas i datę systemową
SELECT SYSDATETIME(),
SYSDATETIMEOFFSET(),
GETDATE(),
GETUTCDATE()
DATEADD ( datepart, liczba, data ) – dodaje (lub odejmuje) liczbę jednostek daty/czasu określonych za pomocą datepart np dni (day, dd, d), lat (years,yy,yyyy), miesięcy (month,mm,m), minut (minute,mi,n) etc. do zadanej daty. Jednostki określone mogą być za pomocą pełnej nazwy, lub skrótu. Pełny ich opis znajdziesz tutaj. Stosowana często w warunkach filtracji, np. wszystkie zlecenia z ostatnich 14 dni. Funkcja DATEADD, jest też bardzo użyteczna w określaniu zakresów
-- DATEADD - dodawanie/odejmowanie jednostek określonego typu z zadanej daty
SELECT DATEADD ( dd,-DAY( GETDATE()-1 ), GETDATE() ) as FirstDayCurrMonth,
DATEADD ( dd,-DAY( GETDATE() ), GETDATE() ) as LastDayPrevMonth
DATEDIFF ( datepart, startdate, enddate ) – różnica pomiędzy dwiema datami (end – start) wyrażona w jednostkach określonych przez datepart. Wiek pracowników :
USE Northwind
GO
-- DATEDIFF - określanie różnicy wyrażonej w konkretnych jednostkach
-- pomiędzy dwiema datami
SELECT FirstName, LastName, BirthDate,
DATEDIFF ( yy , BirthDate , GETDATE() ) as Age
FROM dbo.Employees
DATEPART( datepart, data ) – wyciąga określoną parametrem datepart, jednostkę podanej daty.
-- DATEPART - ekstrakt określonej części daty /czasu
SELECT DATEPART( yy, GETDATE() ) as CurrentYear,
DATEPART( mm, GETDATE() ) as CurrentMonth,
DATEPART( dd, GETDATE() ) as CurrentDay,
DATEPART( ww, GETDATE() ) as CurrentWeek
DATENAME ( datepart, data ) – pododbna do DATEPART, zwraca wartość znakowa, określonej parametrem datepart, części daty w tym nazwę dnia tygodnia, miesiąca zgodnie z ustawieniami @@LANGID (bieżący język dla sesji)
SELECT DATENAME(dw, GETDATE() ) as DzienTygodnia,
DATENAME(mm, GETDATE() ) as Miesiac
Witam,
Cały kurs bardzo przyjemny i rzetelny.
Mam jedno pytanie:
Skąd GETDATE() pobiera dane o dacie?
Domyślnie posiadam yyyy/mm/dd jak można zmienić ustawienie na USA
aby data była wypisywana yyyy/dd/mm
Potrzebuje to zrobić z poziomu systemu / oprogramowania managment studio ale nie samego zapytania bazodanowego.
Czy posiadacie wiedzę na ten temat?
A tu co do daty od poczatku miesiaca, to zapytanie nie zadziala do konca prawidlowo poniewaz pominie pierwszy dzien meisiaca
where [Invoice Date] BETWEEN (select DATEADD ( dd,-DAY( GETDATE()-1), GETDATE())) AND GETDATE()
W tym przypadku wyswietlone zostana dane z dnia 2018-02-02 – 2018-02 -09
biarac pod uwage dzisiejsza date.
Nie wiem jakie masz dane u siebie, ale łatwo możesz sprawdzić poprawność działania :
Zwraca prawidłowy dzień (ale uwaga na godzinę !!! bo tu może być problem – jesli potrzebujesz tylko datę to skonwertuj to na datę only).
–Obliczam dokładniej:
SELECT FirstName, LastName, BirthDate,
DATEDIFF ( dd , BirthDate , GETDATE() ) /365.25 as Age
FROM dbo.Employees
Mega przydatne, za każdym razem jak szukam pomocy z datami to trafiam tutaj 🙂
🙂
Swoją drogą – świetny kurs. Wielkie dzięki!
Litości – „bieżący”, nie nie „bierzący” 🙂
Bez przesady, tylko dwa razy tak było 😉 dziękuję !
„dwiema datami”, a nie „dwoma datami”
No więc podobno obie formy są poprawne, ale chyba faktycznie „dwiema datami” może brzmi ładniej 🙂 dzięki ! pozdrowienia
dobre