2015-10-19 83 views
8

我正在使用SQL Server 2014,並且正在使用來自我的表格之一的列,該列表列出了抵達日期。將日期舍入到月份的第一天

它是按以下格式:

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

我寫一個查詢,會從上表中,包括ArrivalDate列中提取數據。但是,我需要將日期轉換爲它們各自月份的第一天。

換句話說,我的查詢應輸出上面的例子如下:

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

我需要這個,這樣我可以在我的PowerPivot模型創建我的日期表的關係。

我試過這個語法,但它不符合我的要求:

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

該列實際上是'datetime'字段,還是存儲在'varchar'的某個變體中? – Jamiec

+0

這是一個日期時間字段。 – user3115933

+0

在這種情況下,它沒有「格式」。你確實需要做些日期的算術運算來找到給定日期的第一個月。 – Jamiec

回答

8

如果,例如,它是給定的每月15日,那麼你減去14:

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

爲了消除您可以使用時間部分CAST(... AS DATE)

+0

正是我需要的! – user3115933

+0

完美!謝謝你,先生! – JwJosefy

5

使用FORMAT來格式化您的日期。

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

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

或者,如果你不希望部分時間:

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

LiveDemo

+1

做這份工作!高度讚賞。 – user3115933

1

回合日期當月的第一天:

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

與開始SQL Ser ver 2012,您還可以使用DATEFROMPARTS

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