Funkcje daty i czasu

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

FN_datetime_01


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()

FN_datetime_02


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

FN_datetime_03


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

FN_datetime_04


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

FN_datetime_05


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

FN_datetime_06

12 Responses

  • 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 :

        select DATEADD ( dd,-DAY( GETDATE()-1), GETDATE())
        

        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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.