舍入日期到该月的第一天

use*_*933 10 sql t-sql sql-server date sql-server-2014

我正在使用SQL Server 2014,我正在使用我的一个表中的列,列出了到达日期.

它采用以下格式:

ArrivalDate
2015-10-17 00:00:00.000
2015-12-03 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

我正在编写一个查询,从上表中提取数据,包括ArrivalDate列.但是,我需要转换日期,以便它们成为各自月份的第一天.

换句话说,我的查询应该输出上面的例子,如下所示:

2015-10-01 00:00:00.000
2015-12-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

我需要这个,以便我可以在PowerPivot模型中与我的日期表建立关系.

我尝试过这种语法,但它不符合我的要求:

CONVERT(CHAR(4),[ArrivalDate], 100) + CONVERT(CHAR(4), [ArrivalDate], 120) AS [MTH2]
Run Code Online (Sandbox Code Playgroud)

Sal*_*n A 12

例如,如果它是给定月份的第15个,则减去14:

SELECT ArrivalDate
     , CAST(DATEADD(DAY, -DATEPART(DAY, ArrivalDate) + 1, ArrivalDate) AS DATE) AS FirstDay
FROM (VALUES
    (CURRENT_TIMESTAMP)
) AS t(ArrivalDate)
Run Code Online (Sandbox Code Playgroud)

消除您可以使用的时间部分EOMONTH.


Luk*_*zda 8

使用FORMAT格式化你的日期.

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

SELECT FORMAT(@date, 'yyyy-MM-01 HH:mm:ss.fff')
Run Code Online (Sandbox Code Playgroud)

或者如果你不想要时间:

SELECT FORMAT(@date, 'yyyy-MM-01 00:00:00.000')
Run Code Online (Sandbox Code Playgroud)

LiveDemo

  • 干得好!高度赞赏。 (2认同)

Cod*_*ent 7

从 SQL Server 2012 开始,您还可以使用DATEFROMPARTS

SELECT DATEFROMPARTS(YEAR(ArrivalDate), MONTH(ArrivalDate), 1)
FROM   my_table
Run Code Online (Sandbox Code Playgroud)


Met*_*hor 6

到本月第一天的回合日期:

DATEADD(MONTH, DATEDIFF(MONTH, 0, DateColumn), 0)
Run Code Online (Sandbox Code Playgroud)