Tutorial SQL

Przykłady, tutorial, gotowe rozwiązania sql.

Kategoria: MS SQL


Praca z datą i czasem w ms sql




W pracy z ms sql server często napotyka się problemy ze zmiennymi date, datetime, smalldatetime, time. Wynika to z tego, że na różnych środowiskach możemy mieć ustawione inne formaty daty. Inny problem to jak pozbyć się np minut i sekund z datetime lub jak z konwertować wartość na inny typ danych oto kilka przykładów.


select CONVERT(date,getdate(),120)
select CONVERT(smalldatetime,getdate(),120)
select CONVERT(datetime,getdate(),120)
select CONVERT(datetime2(2),getdate(),120)
select CONVERT(time,getdate(),120)
select CONVERT(time(2),getdate(),120)




----------

2011-12-19

-----------------------

2011-12-19 15:40:00

-----------------------

2011-12-19 15:39:33.747

----------------------

2011-12-19 15:39:33.75

----------------

15:39:33.7470000

----------------

15:39:33.75



Powyżej wyniki dla poszczególnych konwersji na różne typy dat w ms sql. Łatwo zauważyć, że 1- to czysta data,2- data z czasem hh:mm, 3- data z czasem i sekundami, 4- tak samo z wyjątkiem dokładności, 5 i 6 to czas.



Polecenie convert w ms sql pozwala na określenie w tym przypadku stylu konwersji daty 120 to yyyy-mm-dd hh:mi:ss(24h).



Jeszcze innym sposobem by pozbawić daty godziny jest konwersja na string

select CONVERT(CHAR(10),GETDATE(),120)




-----------

2011-12-19



Użycie funkcji datepart





Funkcja datepart pozwala nam na wydobycie fragmentu daty jak rok, miesiac, dzien itd.

SELECT * FROM t_Date
WHERE 
DATEPART(YEAR, fDATE) = '2011' AND 
DATEPART(MONTH,fDATE) = '12' AND 
DATEPART(DAY, fDATE) = '09'




Zmiana daty na liczbę, INTEGER, FLOAT





Czasami pożyteczną może być możliwość zamiany daty na liczbę gdy chcemy ją np eksportować lub program ma problem z rozumieniem daty.



select YEAR(getdate())*100000+MONTH(GETDATE())*1000+DAY(GETDATE())
select CAST(GETDATE() AS FLOAT)




Pierwszy przykład za pomocą mnożenia i funkcji zmienia datę na integera.



W połączeniu z funkcją floor typ flout również pozwala nam na pozbycie się minut i sekud.



select CAST(FLOOR(CAST(GETDATE() AS FLOAT))AS DATETIME)




Odejmowanie-dodawanie dat w ms sql





Do odejmowania dat używamy funkcji dateadd. By dodać wartość do daty podajemy funkcji wartość dodatnią by odjąć ujemną.

select dateadd(day,-1,getdate())




Celem odjęcia daty od daty, używamy funkcji datediff.

DATEDIFF(interwał, początek, koniec)

select DATEDIFF(day,'01-01-1900',GETDATE())




Inny format daty rrrrMM (yyyyMM)





Tworząc raport np w tabeli przestawnej, przydaje się nie występujący w ms sql format daty rrrrmm, a jest on niezbędny gdy chcemy zaprezentować dane z kilku lat po miesiącach. Rozwiązanie:



Dla formatu yyyymm oraz yyyy-mm

select YEAR(getdate())*100+MONTH(GETDATE())
select CONVERT(varCHAR(5),YEAR(getdate()))+'-'+right('0'+CONVERT(varCHAR(3),month(getdate())),2)



-----------

201112

--------

2011-12



Ustawienie formau daty SET DATEFORMAT





Na koniec pokaże jak ustawić format daty dla zmiennych w ms sql.



SET DATEFORMAT dmy;
GO
DECLARE @datevar datetime2 = '31/12/2011 10:01:01.1234567';
SELECT @datevar;
GO

SET DATEFORMAT mdy;
GO
DECLARE @datevar datetime2 = '12/31/2011 10:01:01.1234567';
SELECT @datevar;





--------------------------

2011-12-31 10:01:01.12

--------------------------

2011-12-31 10:01:01.12


powrót















SQL-KURSY.pl poleca:

Książki
ksikaksikaksikaksikaksika

Copyright 2010-2011mariuszhk@op.pl

obob ob

Valid HTML 4.01 Transitional

Strona internetowa wykorzystuje pliki cookie zapisywane w pamięci przeglądarki internetowej.

OK