Funkcje daty i czasu w SQL Server

Tomasz Kenig/ Sierpień 4, 2017/ Kurs SQL Server/ 0 komentarzy

1. Funkcje daty i czasu w SQL Server – Jak z nich korzystać?

W artykule lista wszystkich funkcji daty i czasu w SQL Server. Mamy do dyspozycji ponad 20 funkcji, które dają nam możliwość manipulacji datą i czasem. Funkcje daty i czasu w SQL Server możemy podzielić na kilka grup. Są to:

  • Funkcje wyciągające elementy z daty i czasu
  • Funkcje do tworzenia dat i czasu
  • Funkcje zwracające różnice pomiędzy datami
  • Funkcje zwracające bieżącą datę i czas
  • Funkcje manipulujące datą i czasem
  • Funkcje logiczne i systemowe daty i czasu
  • Funkcje konwertujące datę i czas

Do manipulacji niektórymi funkcjami daty i czasu używa się argumentu datepart. Poniżej tabelka z objaśnieniem argumentu. Będzie Ci potrzeba w przykładach używanych w rozdziale.

Nazwa_plNazwa_enSkrót
rokyearyy, yyyy
miesiącquarterqq, q
dzieńmonthmm, m
kolejny dzień rokudayofyeardy, y
kolejny dzień miesiącadaydd, d
kolejny numer tygodniaweekwk, ww
numer dnia tygodniaweekdaydw
godzinahourhh
minutaminutemi, n
sekundasecondss, s
milisekundamillisecondms
mikrosekundamicrosecondmcs
nanosekundananosecondns
strefa czasowaTZoffsettz
iso weekISO_WEEKisowk, isoww

2. Funkcje wyciągające elementy z daty i czasu

Poniżej lista funkcji daty i czasu w SQL Server, za pomocą których możemy wyciągnąć z dat takie elementy jak np dzień, miesiąc, rok itp.:

FunkcjaSkładniaOpisTyp zwracany
DAYDAY ( date )Zwraca dzień z daty w formie liczby od 1 do 31.int
MONTHMONTH ( date )Zwraca miesiąc z daty w formie liczby od 1 do 12.int
YEARYEAR ( date )Zwraca rok z daty w formie liczby.int
DATENAMEDATENAME ( datepart , date )Zwraca z daty element określony w argumencie datepart w formie słownej.nvarchar
DATEPARTDATEPART ( datepart , date )Zwraca z daty element określony w argumencie datepart. Np. rok, miesiąc, sekunda itp.int

Stwórzmy kilka przykładów z użyciem poznanych funkcji. Zauważ, że przykładowa data została wprowadzona w dwóch różnych formach: YYYYMMDD i YYYY-MM-DD. W dwóch ostatnich funkcjach używany jest interwał datepart. Nie należy go mylić z funkcją o tej samej nazwie. Interwał możemy wprowadzać w cudzysłowie.

Funkcje daty i czasu w SQL Server

Funkcje daty i czasu w SQL Server

3. Funkcje do tworzenia dat i czasu

W SQL Server mamy szereg funkcji, z których możesz utworzyć wartość o typie danych daty/czasu. Funkcje różnią się głównie tym, że zwracają wynik w innych typach danych.

FunkcjaSkładniaOpisTyp zwracany
DATEFROMPARTSDATEFROMPARTS ( year, month, day )Zwraca wartość daty o typie date po podaniu argumentów w formie liczb dla roku, miesiąca i dniadate
DATETIME2FROMPARTSDATETIME2FROMPARTS ( year, month, day, hour, minute, 
seconds, fractions, precision )
Zwraca wartość daty i czasu o typie danych datetime2 po podaniu argumentów w formie liczb dla roku, miesiąca i dnia, godziny, minuty, sekundy, frakcji i precyzji. Precyzja może być liczbą maksymalnie 7 cyfrową.datetime2(precision )
DATETIMEFROMPARTSDATETIMEFROMPARTS ( year, month, day,
 hour, minute, seconds, milliseconds )
Zwraca datę po podaniu argumentów w formie liczb dla roku, miesiąca i dnia, godzinn, minut, sekund, milisekund.datetime
DATETIMEOFFSETFROMPARTSDATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, 
seconds, fractions, hour_offset,
 minute_offset, precision )
Zwraca wartość daty, czasu i strefę czasową po podaniu argumentów w formie liczb dla roku, miesiąca i dnia, godziny, minuty, sekundy, frakcji i precyzji. Precyzja może być liczbą maksymalnie 7 cyfrową.datetime(precision )
SMALLDATETIMEFROMPARTSSMALLDATETIMEFROMPARTS ( year, month, day, hour, minute )Zwaraca wartość daty i czasu w typie danych smalldatetime, a więc bez sekund.smalldatetime
TIMEFROMPARTSTIMEFROMPARTS ( hour, minute, seconds, fractions, precision )Zwraca czas po podaniu godziny, minuty, sekundy, frakcji i precyzji. Precyzja może być liczbą maksymalnie 7 cyfrową.time(precision )

Data i czas - SQL Server funkcje

Data i czas – SQL Server funkcje

4. Funkcje zwracające różnice pomiędzy datami

Jeśli chce policzyć różnice pomiędzy datami najprostszym sposobem jest działanie arytmetyczne odejmujące jedną datę od drugiej. Możesz też użyć w tym celu funkcji DATEDIFF I DATEDIFF_BIG. Za pomocą tych funkcji w prostszy sposób możesz określić w jakich jednostkach chcesz otrzymać wynik. Mogą to być dni, miesiące, lata, milisekundy itp. Określasz to w argumencie datepart. Funkcji DATEDIFF_BIG używaj, gdy spodziewasz się w wyniku większego niż zakres typu danych int.Funkcja DATEDIFF_BIG dostępna jest od wersji SQL Server 2016.

FunkcjaSkładniaOpisTyp zwracany
DATEDIFFDATEDIFF ( datepart , startdate , enddate )Zwraca różnicę pomiędzy wskazanymi datami. To, czy różnica będzie podana w dniach, latach, czy sekundach określamy w argumencie datepart. Typ danych zwracany to intint
DATEDIFF_BIGDATEDIFF_BIG ( datepart, startdate , enddate )Zwraca różnicę pomiędzy wskazanymi datami. To, czy różnica będzie podana w dniach, latach, czy sekundach określamy w argumencie datepart. Typ danych zwracany to bigint. Używamy tej funkcji do obliczenia różnic w bardzo dużych przedziałach. Np. gdy różnicę pomiędzy dniami chcemy podać w milisekundachbigint

5. Funkcje zwracające bieżącą datę i czas

Kolejne funkcje daty i czasu w SQL Server to funkcje, za pomocą których możesz uzyskać z serwera datę i godzinę. Funkcje różnią się przede wszystkim zwracaną  precyzją. Najczęściej będziesz używał funkcji GETDATE().

FUNKCJASkładniaOpisTyp zwracany
SYSDATETIMESYSDATETIME ()Zwraca bieżącą datę i czas o typie danych datetime2 z komputera na którym działa SQL Server. Nie zwraca strefy czasowej.datetime2(7)
SYSDATETIMEOFFSETSYSDATETIMEOFFSET ( )Zwraca bieżącą datę i czas o typie danych datetimeoffset z komputera na którym działa SQL Server. Zwraca strefę czasową.datetimeoffset(7)
SYSUTCDATETIMESYSUTCDATETIME ( )Zwraca bieżącą datę i czas o typie danych datetime2 z komputera na którym działa SQL Server. Zwraca strefę czasową.datetime2(7)
CURRENT_TIMESTAMPCURRENT_TIMESTAMPZwraca bieżącą datę i czas z komputera, na którym działa serwer.datetime
GETDATEGETDATE ( )Zwraca bieżącą datę i czas z komputera, na którym działa serwer.datetime
GETUTCDATEGETUTCDATE ( )Zwraca datę i czas z komputera, na którym działa serwer w formie czasu UTC.datetime

SQL Server - funkcje daty i czasu

SQL Server – funkcje daty i czasu

6. Funkcje manipulujące datą i czasem

Najważniejszą funkcją do manipulacji datą i czasem jest funkcja DATEADD(). Możesz za jej pomocą dodawać lub odejmować od daty dowolne jednostki czasu jak dni, miesiące, lata itp.

FunkcjaSkładniaOpisTyp zwracany
DATEADDDATEADD (datepart, number , date )Funkcja dodaje do daty/czasu określony w argumencie interwał czasu. Możemy dodać dzień, miesiąc, rok, sekundy itp..typ danych z argumentu
EOMONTHEOMONTH ( start_date [, month_to_add ] )Zwraca ostatni dzień miesiąca z podanej daty. W argumencie możemy też dodać lub odjąć miesiące.typ danych z argumentu
SWITCHOFFSETSWITCHOFFSET(DATETIMEOFFSET , time_zone)Funkcja zmienia strefę czasową dla dat zapisanych w typie DATETIMEOFFSET.DATETIMEOFFSET
TODATETIMEOFFSETTODATETIMEOFFSET (expression , time_zone)Zmienia daty o typie datetime2 na datetimeoffset.DATETIMEOFFSET

7. Funkcje logiczne i systemowe daty i czasu

FunkcjaSkładniaOpisTyp zwracany
ISDATEISDATE ( expression)Funkcja sprawdza, czy podany argumentjest datą o typie datetime lub smalldatatime. Zwraca wartość 1 dla prawdy i 0 dla fałsz. Dla daty = NULL zwróci wartość 0.int
@@DATEFIRST@@DATEFIRSTZwraca pierwszy dzień tygodnia ustawiony dla bieżącej sesji w formie liczb od 1 do 7.tinyint
SET DATEFIRSTSET DATEFIRST { number | @number_var }Ustawia pierwszy dzień tygodnia dla bieżącej sesji. Przyjmuje wartosci od 1 do 7.
SET DATEFORMATSET DATEFORMAT { format | @format_var }Funkcja ustawia porządek dnia, miesiąca i roku w wyświetlanej dacie. Daty o typie datetime i smalldatetime.

Źródło: Microsoft

Funkcje logiczne daty i czasu w SQL Server

Funkcje logiczne daty i czasu w SQL Server

8. Zadania (Odpowiedź możesz wpisać w komentarzu)

Zostaw Komentarz

Twój adres email nie zostanie opublikowany.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">