【问题标题】:Rounding dates to first day of the month将日期四舍五入到当月的第一天
【发布时间】:2016-01-17 17:32:27
【问题描述】:

我正在使用 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]

【问题讨论】:

  • 该列实际上是datetime 字段,还是存储在varchar 的某些变体中?
  • 这是一个日期时间字段。
  • 在这种情况下,它没有“格式”。您确实是在询问是否需要对日期进行一些算术运算才能找到给定日期的月份的第一天。

标签: sql sql-server tsql date sql-server-2014


【解决方案1】:

例如,如果它是给定月份的 15 号,则减去 14 并将结果转换为日期:

SELECT ArrivalDate
     , CAST(DATEADD(DAY, -DATEPART(DAY, ArrivalDate) + 1, ArrivalDate) AS DATE) AS FirstDay
FROM (VALUES
    (CURRENT_TIMESTAMP)
) AS t(ArrivalDate)
ArrivalDate             | FirstDay
2019-05-15 09:35:12.050 | 2019-05-01

但我最喜欢的是EOMONTH,它需要 SQL Server 2012:

SELECT ArrivalDate
     , DATEADD(DAY, 1, EOMONTH(ArrivalDate, -1)) AS FirstDay
FROM (VALUES
    (CURRENT_TIMESTAMP)
) AS t(ArrivalDate)
ArrivalDate             | FirstDay
2019-05-15 09:35:52.657 | 2019-05-01

【讨论】:

  • 正是我需要的!
  • 完美!谢谢楼主!
【解决方案2】:

使用 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

【讨论】:

  • 干得好!高度赞赏。
  • 使用 MySQL:DATE_FORMAT(@date, '%Y-%m-01')
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    到月初的圆日期:

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

    【讨论】:

      【解决方案5】:

      或者只是简单地使用 ROUND 函数 -

      SELECT ROUND (TO_DATE ('27-OCT-00'),'YEAR') DUAL 中的“新年”;

      新年

      01-JAN-01

      【讨论】:

      • 对于 SQL Server 问题,这看起来有点像 Oraclish
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多