2009-02-19 10 views
23

Eventuali duplicati:
Get just the Date from grouping in select from DateTime column in SQL ServerPrendi solo la parte Data di DateTime in mssql

Come posso ottenere solo la parte data di una DateTime? Sto cercando qualcosa come la funzione year() ma per l'intera data.

+0

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

risposta

28

La soluzione che si desidera è quello proposto qui:

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

In sostanza, si esegue questa operazione:

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

C'è una definizione di funzione nel link che vi permetterà di consolidare la funzionalità e chiamala ovunque (invece di doverla ricordare) se lo desideri.

+0

qui è la risposta migliore https://stackoverflow.com/questions/113045/how-to-return-only-the-date-from-a-sql-server-datetime-datatype – Adeem

15

Un altro modo ingegnoso è:

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

che ottiene il numero di giorni dal giorno 0 al YourDate e lo aggiunge al GIORNO 0 per impostare di nuovo la linea di base. Questo metodo (o "derivati" del presente documento) può essere utilizzato per una serie di altre manipolazioni di date.

Modifica - altri calcoli di data:

primo giorno del mese:

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

Primo giorno dell'anno:

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

primo giorno del trimestre:

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

Ultimo Da y del mese precedente:

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

Ultimo giorno del mese corrente:

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

Ultimo giorno di anno in corso:

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

primo Lunedi del mese:

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

Modifica: Vero, Joe, non lo aggiunge a GIORNO 0, aggiunge 0 (giorni) al numero di giorni che in pratica lo converte solo in un datetime.

+0

Dateadd (intervallo, numero, data). .. quindi in sostanza stai aggiungendo 0 a questo. .. cast (datediff (dd, 0, [yourdate]) come datetime) – dotjoe

2

Questo potrebbe non essere così liscia come un one-liner, ma lo uso per eseguire manipolazione data principalmente per i rapporti:

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 

Io lo uso per ottenere oraria, giornaliera, mensile, e le date annuali utilizzati per reporting e indicatori di performance, ecc.

6

Possiamo usare questo metodo:

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

Ultimo parametro cambia il formato solo per ottenere il tempo o la data in formati specifici.

65

Questo può anche aiutare:

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

Problemi correlati