2015-10-19 45 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 
相关问题