将日期四舍五入到该月的第一天
Rounding dates to first day of the month
我正在使用 SQL Server 2014,我正在使用我的 table 之一的列,其中列出了到达日期。
格式如下:
ArrivalDate
2015-10-17 00:00:00.000
2015-12-03 00:00:00.000
我正在编写一个查询,该查询将从上述 table 中提取数据,包括 ArrivalDate 列。但是,我需要转换日期,使它们成为各自月份的第一天。
换句话说,我的查询应该输出上面的例子如下:
2015-10-01 00:00:00.000
2015-12-01 00:00:00.000
我需要这个以便我可以在我的 PowerPivot 模型中创建与我的日期 Table 的关系。
我试过这种语法,但它不符合我的要求:
CONVERT(CHAR(4),[ArrivalDate], 100) + CONVERT(CHAR(4), [ArrivalDate], 120) AS [MTH2]
例如,如果是给定月份的 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
使用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')
舍入到月初的日期:
DATEADD(MONTH, DATEDIFF(MONTH, 0, DateColumn), 0)
从 SQL Server 2012 开始,您还可以使用 DATEFROMPARTS
:
SELECT DATEFROMPARTS(YEAR(ArrivalDate), MONTH(ArrivalDate), 1)
FROM my_table
或者只是简单地使用 ROUND 函数 -
SELECT 圆形 (TO_DATE ('27-OCT-00'),'YEAR')
"New Year" 来自双重;
新年
01 年 1 月
我正在使用 SQL Server 2014,我正在使用我的 table 之一的列,其中列出了到达日期。
格式如下:
ArrivalDate
2015-10-17 00:00:00.000
2015-12-03 00:00:00.000
我正在编写一个查询,该查询将从上述 table 中提取数据,包括 ArrivalDate 列。但是,我需要转换日期,使它们成为各自月份的第一天。
换句话说,我的查询应该输出上面的例子如下:
2015-10-01 00:00:00.000
2015-12-01 00:00:00.000
我需要这个以便我可以在我的 PowerPivot 模型中创建与我的日期 Table 的关系。
我试过这种语法,但它不符合我的要求:
CONVERT(CHAR(4),[ArrivalDate], 100) + CONVERT(CHAR(4), [ArrivalDate], 120) AS [MTH2]
例如,如果是给定月份的 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
使用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')
舍入到月初的日期:
DATEADD(MONTH, DATEDIFF(MONTH, 0, DateColumn), 0)
从 SQL Server 2012 开始,您还可以使用 DATEFROMPARTS
:
SELECT DATEFROMPARTS(YEAR(ArrivalDate), MONTH(ArrivalDate), 1)
FROM my_table
或者只是简单地使用 ROUND 函数 -
SELECT 圆形 (TO_DATE ('27-OCT-00'),'YEAR') "New Year" 来自双重;
新年
01 年 1 月