2015-10-19 21 views
8

Sto utilizzando SQL Server 2014 e sto lavorando con una colonna di una delle mie tabelle, che elenca le date di arrivo.Arrotondamento al primo giorno del mese

E 'nel seguente formato:

ArrivalDate 
2015-10-17 00:00:00.000 
2015-12-03 00:00:00.000 

Sto scrivendo una domanda che avrebbe tirare i dati dalla tabella di cui sopra, tra cui la colonna ArrivalDate. Tuttavia, dovrò convertire le date in modo che diventino il primo giorno dei rispettivi mesi.

In altre parole, la mia domanda dovrebbe uscita l'esempio precedente come segue:

2015-10-01 00:00:00.000 
2015-12-01 00:00:00.000 

Ho bisogno di questo in modo che io possa creare un rapporto con la mia data tabella nel mio modello PowerPivot.

ho provato questa sintassi, ma non soddisfa le mie esigenze:

CONVERT(CHAR(4),[ArrivalDate], 100) + CONVERT(CHAR(4), [ArrivalDate], 120) AS [MTH2] 
+1

È che in realtà una colonna 'DateTime' campo, o è vero memorizzati in qualche variazione di' varchar'? – Jamiec

+0

È un campo datetime. – user3115933

+0

In tal caso non ha un "formato". Stai davvero chiedendo di dover fare un po 'di aritmetica con le date per trovare il primo del mese per una determinata data. – Jamiec

risposta

8

Se, ad esempio, è 15 dato mese, allora si sottrae 14:

SELECT 
    ArrivalDate, 
    DATEADD(DAY, -DATEPART(DAY, ArrivalDate) + 1, ArrivalDate) AS FirstDay 
FROM [Your Table] 

Per eliminare la porzione del tempo è possibile utilizzare CAST(... AS DATE).

+0

Esattamente quello di cui avevo bisogno! – user3115933

+0

Perfetto! Grazie Signore! – JwJosefy

5

Utilizzare FORMAT per formattare la data.

DECLARE @date DATETIME = '2015-10-17 00:00:00.000' 

SELECT FORMAT(@date, 'yyyy-MM-01 HH:mm:ss.fff') 

Oppure, se non si vuole part-time:

SELECT FORMAT(@date, 'yyyy-MM-01 00:00:00.000') 

LiveDemo

+1

Fa il lavoro! Molto apprezzata. – user3115933

1

data rotonda al primo giorno del mese:

DATEADD(MONTH, DATEDIFF(MONTH, 0, DateColumn), 0) 
2

Cominciando con SQL Ser ver 2012, è anche possibile utilizzare DATEFROMPARTS:

SELECT DATEFROMPARTS(YEAR(ArrivalDate), MONTH(ArrivalDate), 1) 
FROM my_table 
Problemi correlati