Pobieranie części składowych daty i czasu za pomocą T-SQL
SQL Server 2012 oprócz bogatego zbioru typów danych daty i czasu, funkcji zwracających bieżący czas dostarcza także szereg funkcji pozwalających na pobieranie tylko wybranej części daty lub czasu.
Jedną z takich funkcji jest DAY(date)
, która zwraca w postaci liczby całkowitej dzień miesiąca z przekazanej jako parametr daty. Parametrem może być dowolny typ danych daty i czasu. Jak widać w poniższym przykładzie format takiej daty też może być dowolny.
SELECT DAY( '2016-8-24' ), DAY( '2016/8/25' ) ,DAY( '20160826' ), DAY( '2016.08.27' );
Przekazać w parametrze możemy także funkcję zwracającą bieżącą datę i czas.
SELECT DAY( SYSDATETIME() ), DAY( SYSDATETIMEOFFSET() ), DAY( SYSUTCDATETIME() ); ,DAY( CURRENT_TIMESTAMP ), DAY( GETDATE() ), DAY( GETUTCDATE() ) ;
Oprócz daty parametr może także pobierać liczbę całkowitą. Liczba ta oznacza zawsze liczbę dni. Przy tym parametrze jest brana pod uwagę data 1 stycznia1900 roku, do której jest dodawana liczba din z parametru. Poniżej przykład:
SELECT DAY(0) as '0 days', DAY(5) as '5 days', DAY(30) as '30 days' ,DAY(31) as '31 days', DAY(300) as '300 days';
Kolejna funkcja to MONTH(date)
. Zwraca ona w postaci liczby całkowitej miesiąc z przekazanej jako parametr daty. Parametrem może być dowolny typ danych daty i czasu. Jak widać w poniższym przykładzie format takiej daty też może być dowolny.
SELECT MONTH( '2016-8-24' ), MONTH( '2016/8/25' ) ,MONTH( '20160826' ), MONTH( '2016.08.27' );
SELECT MONTH( SYSDATETIME() ), MONTH( SYSDATETIMEOFFSET() ), MONTH( SYSUTCDATETIME() ) ,MONTH( CURRENT_TIMESTAMP ), MONTH( GETDATE() ), MONTH( GETUTCDATE() ) ;
Oprócz daty parametr może także pobierać liczbę całkowitą. Liczba ta oznacza zawsze liczbę dni. Przy tym parametrze jest brana pod uwagę data 1 stycznia1900 roku, do której jest dodawana liczba din z parametru. Poniżej przykład:
SELECT MONTH(0) as 'month for 0 days', MONTH(547) as 'month for 547 days' ,MONTH(311) as 'month for 311 days';
Podobna funkcja to YEAR(date)
, która zwraca w postaci liczby całkowitej rok z przekazanej jako parametr daty. Parametrem może być dowolny typ danych daty i czasu. Jak widać w poniższym przykładzie format takiej daty też może być dowolny.
SELECT YEAR( '2016-8-24' ), YEAR( '2016/8/25' ) ,YEAR( '20160826' ), YEAR( '2016.08.27' );
SELECT YEAR( SYSDATETIME() ), YEAR( SYSDATETIMEOFFSET() ), YEAR( SYSUTCDATETIME() ) ,YEAR( CURRENT_TIMESTAMP ), YEAR( GETDATE() ), YEAR( GETUTCDATE() ) ;
Oprócz daty parametr może także pobierać liczbę całkowitą. Liczba ta oznacza zawsze liczbę dni. Przy tym parametrze jest brana pod uwagę data 1 stycznia1900 roku, do której jest dodawana liczba din z parametru. Poniżej przykład:
SELECT YEAR(0) as 'year for 0 days', YEAR(1111) as 'year for 1111 days' ,YEAR(3211) as 'year for 3211 days';
Poza wymienionymi wyżej funkcjami T-SQL dostarcza również takie funkcje jak: DATENAME (datepart, date)
oraz DATEPART (datepart, date)
. Pierwsza z nich zwraca łańcuch znakowy( typ danych nvarchar ) jako część daty lub czasu wyspecyfikowanej z parametru datepart i daty podanej jako drugi parametr. Druga z funkcji pobiera te same parametry, ale zwraca liczbę całkowitą.
Parametr date w tych funkcjach może stanowić dowolny typ danych daty i czasu. Natomiast parametr datepart może przyjmować jedną z wymienionych wartości lub ich skróty, informujące o tym, jak część daty i czasu ma być zwrócona.
year yy, yyyy quarter qq, q month mm, m dayofyear dy, y day dd, d week wk, ww weekday dw, w hour hh minute mi, n second ss, s millisecond ms microsecond mcs nanosecond ns TZoffset tz
Poniższe przykłady pokazują sposób działania tych funkcji:
SELECT DATENAME( q, SYSDATETIME() );
SELECT DATENAME( m, SYSDATETIME() ), DATEPART( m, SYSDATETIME() );
SELECT DATENAME( weekday, SYSDATETIME() ), DATEPART( weekday, SYSDATETIME() );
SELECT DATENAME( tz, SYSDATETIME() ), DATEPART( tz, SYSDATETIME() );
SELECT DATENAME( yyyy, SYSDATETIME() ), DATEPART( yy, SYSDATETIME() );
W większości przypadków wartości zwracane prze te funkcje będą takie same.