sql - 将日期四舍五入到该月的第一天

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

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

最佳答案

例如,如果是给定月份的 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

关于sql - 将日期四舍五入到该月的第一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33213243/

相关文章:

SQL 存储过程不返回任何数据

sql-server - 为什么 'œ' 匹配 NVarchar 中的 'oe' 但不匹配 Varchar

sql-server-2005 - SQL Server 2005 - 查找哪些存储过程运行到特定表

sql - 表 "ap"中有一个名为 "session"的列,但无法从这部分查询中引用它

sql - 如何设置 SQL Server 代理?不在 Sql Server 管理中显示

c# - 停止自定义 ASP.NET Core 配置提供程序中的 SqlDependency

c# - Linq 查询等效于存在多个条件

sql - 搜索自然语言句子结构

mysql - 更新大表中的查询

sql-server - SQL Server 列级安全性 - 是否可以在列上拒绝 SELECT,但是,它是否可用于该表的 WHERE 子句?