【问题标题】:Is there a way to bring two date manipulations into one column when writing a query?有没有办法在编写查询时将两个日期操作合并到一个列中?
【发布时间】:2019-07-01 17:49:12
【问题描述】:

抱歉,伙计们提出了菜鸟问题!在查询数据库方面,我还很陌生。 好吧,简而言之,我正在尝试逐月计算。我想创建一个销售列,基本上是一个月推送,允许我创建 MoM 的计算 ((SalesColumn - PushedSales) / PushedSales) * 100。

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

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

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

第 1 部分:

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

第 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

并创建了一个视图,

然后使用该视图我已经完成了第 2 部分:

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

这给了我正确的答案,除了感觉像操纵日期的一种非常低效的方式。

【问题讨论】:

  • 任何带有示例的示例数据都会有所帮助...
  • 你的问题不是很清楚。查看来自Spaghetti DBA 的这篇帖子,了解一些提示和技巧,让您更容易获得答案。使用问题下方的edit 链接进行修改。
  • @EricBrandt 谢谢,我会通读的
  • @ChaitanyaKotha 所以我正在使用 Tableau 示例数据(Superstore - community.tableau.com/docs/DOC-1236)我希望这会有所帮助吗?

标签: sql sql-server date data-manipulation


【解决方案1】:

SQLServer 2012+ 有一个函数 EOMonth,它返回当月的最后一天,也就是您传入的日期。在其中添加一天可以让您开始下一天 月(没有 SOMonth 的推论,唉)

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

如果你要嵌套很多函数调用,每个函数调用都有参数,那么你最好格式化(缩进)你的代码

【讨论】:

  • 太棒了!认为也很完美!并且绝对注意使用嵌套!!
  • 如果答案对您来说是正确的,请不要忘记通过单击灰色箭头进行标记,使其变为绿色。您还可以对任意数量的有用答案进行投票,包括您接受的答案
【解决方案2】:

如果我理解正确,我认为这可以满足您的需求:dateadd(month,1,dateadd(day,1-day(Order_Date),Order_Date))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-04
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多