2009-02-19 11 views
23

Powiel możliwe:
Get just the Date from grouping in select from DateTime column in SQL ServerPobierz tylko data część DateTime w mssql

Jak mogę uzyskać tylko data część DateTime? Szukam czegoś podobnego do funkcji year(), ale przez całą datę.

+0

Patrz także: http://stackoverflow.com/questions/133081/most-efficient-way-in-ms-sql-to-get -date-from-datetime i http://stackoverflow.com/questions/2775/whats-the-best-way-to-remove-the-time-portion-ofa-a-datetime-value-sql-server – Kristen

Odpowiedz

28

Rozwiązanie chcesz to jeden zaproponowany tutaj:

cast(floor(cast(@dateVariable as float)) as datetime) 

Jest definicja funkcji w link, który pozwoli skonsolidować:

https://stackoverflow.com/a/542802/50776

Zasadniczo, można to zrobić Funkcjonalność i zadzwoń w dowolne miejsce (nie musisz tego pamiętać), jeśli chcesz.

+0

Tutaj jest lepszą odpowiedzią https://stackoverflow.com/questions/113045/how-to-return-only-the-date-from-a-sql-server-datetime-datatype – Adeem

15

Innym sposobem jest ładne:

DATEADD(dd, 0, DATEDIFF(dd, 0, [YourDate])) 

który dostaje liczbę dni od dnia 0 do YourDate i dodaje go do dnia 0 ponownie ustawić linię bazową. Ta metoda (lub jej "pochodne") może być używana do wielu innych manipulacji datami.

Edycja - inny termin obliczenia:

pierwszy dzień miesiąca:

DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0) 

First Day of the Year:

DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0) 

Pierwszy dzień kwartału:

DATEADD(qq, DATEDIFF(qq, 0, getdate()), 0) 

Last Da Y z poprzedniego miesiąca:

DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)) 

Ostatni dzień bieżącego miesiąca:

DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, getdate()) + 1, 0)) 

Ostatni dzień bieżącego roku:

DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, getdate()) + 1, 0)) 

pierwszy poniedziałek miesiąca:

DATEADD(wk, DATEDIFF(wk, 0, DATEADD(dd, 6 - DATEPART(day, getdate()), getdate())), 0)   

Edytuj: To prawda, Joe, nie dodaje go do DAY 0, dodaje 0 (dni) do liczby dni, które w zasadzie po prostu konwertują ją z powrotem do datetime.

+0

Dateadd (interwał, liczba, data). .. więc zasadniczo dodajesz 0 do tego. .. cast (datediff (dd, 0, [twoja data]) jako datetime) – dotjoe

2

To nie może być tak śliskie jak one-liner, ale używam go do wykonywania datę manipulacji głównie na raportach:

DECLARE @Date datetime 
SET @Date = GETDATE() 

-- Set all time components to zero 
SET @Date = DATEADD(ms, -DATEPART(ms, @Date), @Date) -- milliseconds = 0 
SET @Date = DATEADD(ss, -DATEPART(ss, @Date), @Date) -- seconds = 0 
SET @Date = DATEADD(mi, -DATEPART(mi, @Date), @Date) -- minutes = 0 
SET @Date = DATEADD(hh, -DATEPART(hh, @Date), @Date) -- hours = 0 

-- Extra manipulation for month and year 
SET @Date = DATEADD(dd, -DATEPART(dd, @Date) + 1, @Date) -- day = 1 
SET @Date = DATEADD(mm, -DATEPART(mm, @Date) + 1, @Date) -- month = 1 

używam tego, aby co godzinę, codziennie, co miesiąc i daty roczne używany do raportowania i wskaźników wydajności itp.

6

Możemy użyć tej metody:

CONVERT(VARCHAR(10), GETDATE(), 120) 

Ostatni parametr zmienia format tylko, aby uzyskać czas lub datę w określonych formatach.

65

To może pomóc także:

SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM (or PM) 
             -- Oct 2 2008 11:01AM 
SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy - 10/02/2008     
SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02   
SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy 
SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy 
SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy 
SELECT convert(varchar, getdate(), 106) -- dd mon yyyy 
SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy 
SELECT convert(varchar, getdate(), 108) -- hh:mm:ss 
SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM) 
             -- Oct 2 2008 11:02:44:013AM 
SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy 
SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd 
SELECT convert(varchar, getdate(), 112) -- yyyymmdd 
SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm 
             -- 02 Oct 2008 11:02:07:577  
SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h) 
SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h) 
SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm 
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm 
             -- 2008-10-02T10:52:47.513 
-- SQL create different date styles with t-sql string functions 
SELECT replace(convert(varchar, getdate(), 111), '/', ' ') -- yyyy mm dd 
SELECT convert(varchar(7), getdate(), 126)     -- yyyy-mm 
SELECT right(convert(varchar, getdate(), 106), 8)   -- mon yyyy 

The Source

Powiązane problemy