编写查询时,是否可以将两个日期操作合并到一列中?

时间:2019-07-01 17:49:12

标签: sql sql-server date data-manipulation

抱歉,菜鸟们!关于查询数据库,我还很陌生。 好吧,简而言之,我正在尝试计算月数。我想为销售创建一个列,该列实际上被推迟了一个月,因此我可以通过以下方式创建MoM的计算: (((SalesColumn-PushedSales)/ PushedSales)* 100。

我的目标是首先将日期的月份部分推1个月,然后将日期部分更改为每月1号。

我要完成的工作是找到一种积累这两个语句的方法。

DATEADD(MONTH, 1, Order_Date) & DATEFROMPARTS(YEAR(Order_Date), MONTH(Order_Date), DAY(0))

PART 1:

SELECT DATEADD(MONTH, 1, Order_Date), Sales
FROM Orders
ORDER BY Order_Date

PART 2:

SELECT DATEFROMPARTS(YEAR(Order_Date),MONTH(Order_Date),DAY(0)), Sales
FROM Orders
ORDER BY Order_Date

我已经完成了第1部分:

SELECT DATEADD(MONTH, 1, Order_Date), Sales
FROM Orders
ORDER BY Order_Date

并创建了一个视图

然后使用该视图完成第二部分:

SELECT DATEFROMPARTS(YEAR(Order_Date), MONTH(Order_Date), DAY(0)),[Sales]
FROM Orders
ORDER BY Order_Date

除了给人一种操作日期的效率很低的方式之外,这给了我正确的答案。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,我认为这可以为您提供所需的东西:dateadd(month,1,dateadd(day,1-day(Order_Date),Order_Date))

答案 1 :(得分:0)

SQLServer 2012+具有函数EOMonth,该函数返回传入日期的月份的最后一天。为此添加一天,就可以开始下一个工作 月份(没有SOMonth推论a)

DATEADD(Day, 1, EOMonth(Order_Date))

将2000年1月23日传递给它,它将EOMonth传递给2000年1月31日,然后再加上一天的时间使您到达2000年2月1日

您无需创建视图即可将一个函数的输出用作另一个函数的输入,只需将函数链接(嵌套)即可:

A(B(C(column)))

这将调用函数C并传入列,然后从C中获取输出并将其传递给B,然后从B中获取输出并将其传递给A

如果您要嵌套很多函数调用,每个函数都带有参数

,最好明智地格式化(缩进)代码