Funkcje daty i czasu w SQL Server

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.

--tomaszkenig.pl
select 
DAY('2020-01-01 12:23:11.1234567') as f_DAY,
MONTH('2020-01-01') as f_MONTH,
YEAR('20200101') as f_YEAR,
DATENAME("MM" , '20200101') as f_DATENAME,
DATEPART("isowk" , '20200101') as f_DATEPART_1,
DATEPART(HH , '2020-01-01 12:23:11.1234567') as f_DATEPART_2,
DATEPART(MI , '2020-01-01 12:23:11.1234567') as f_DATEPART_3,
DATEPART(DD , '2020-01-01 12:23:11.1234567') as f_DATEPART_4
;
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 )
--tomaszkenig.pl
select 
DATEFROMPARTS(2020,12,07) as f_DATEFROMPARTS,
DATETIME2FROMPARTS(2020,12,07,12,17,53,1234,7) as f_DATETIME2FROMPARTS,
DATETIMEFROMPARTS(2020,12,07,12,17,53,123) as f_DATETIMEFROMPARTS,
DATETIMEOFFSETFROMPARTS(2020,12,07,12,17,53,1234,1,30,7) as f_DATETIMEOFFSETFROMPARTS,
SMALLDATETIMEFROMPARTS(2020,12,07,12,17) as f_SMALLDATETIMEFROMPARTS,
TIMEFROMPARTS(12,17,53,1234,7) as f_TIMEFROMPARTS
;
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
--tomaszkenig.pl

select
convert(int, convert(datetime, '2017-09-01') - convert(datetime, '2017-06-21')) as zwykla_roznica_dat,
convert(float, convert(datetime, '2017-09-01 13:22:11') - convert(datetime, '2017-06-21 14:44:00')) * 86400 as zwykla_roznica_dat_w_sekundach,
datediff(DD,'1906-01-01' ,getdate())

--w SQL Server 2016:
select
datediff_big(ms,'1906-01-01' ,getdate());

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
--tomaszkenig.pl
SELECT
SYSDATETIME() AS F1,
SYSDATETIMEOFFSET() AS F2,
SYSUTCDATETIME() AS F3,
CURRENT_TIMESTAMP AS F4,
GETDATE() AS F5,
GETUTCDATE() AS F6;
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
SELECT
DATEADD(DD, 15 , getdate()) AS F1,
DATEADD(HH, -15 , getdate()) AS F2,
EOMONTH(getdate()) AS F3,
EOMONTH(getdate(),-6) AS F4,
SWITCHOFFSET('2020-12-07 10:57:53.0001234 +00:01' , '+00:10') AS F5,
TODATETIMEOFFSET (GETDATE() , '+00:10')
;

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.
select
ISDATE('2019-01-01') as f_1,
ISDATE('20190101') as f_2,
@@DATEFIRST as f_3
go

SET DATEFIRST 7
go
select @@DATEFIRST as f_4
go

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

Dodaj komentarz

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

3 komentarze “Funkcje daty i czasu w SQL Server”