【问题标题】:Add integer value to date SQL将整数值添加到日期 SQL
【发布时间】:2018-10-19 12:57:01
【问题描述】:

在带有 Microsoft 查询的 excel 中,我们有一列格式为日期,称为“JM5OPENORDERSDAY_0.CONFIRMED_DEL_DATE”。

第二列 (DB1ARTSTATDAY_0.TOTAL_REP_LEADTIME) 包含日期,格式为数字,例如“40”、“10”和“5”。

我们想要创建一个过滤器,用于对日期超过的命中进行排序,例如:CONFIRMED_DEL_DATE+"40"。

我和我的同事对 SQL 的了解显然非常有限,但到目前为止我们想出了:

SELECT
FROM
WHERE DB1ARTSTATDAY_0.MATNR = JM5OPENORDERSDAY_0.MATNR AND 
DB1ARTSTATDAY_0.PLANT = JM5OPENORDERSDAY_0.PLANT AND 
 ((JM5OPENORDERSDAY_0.CONFIRMED_DEL_DATE<(NOW()+DATEADD(DAY,DB1ARTSTATDAY_0.TOTAL_REP_LEADTIME, JM5OPENORDERSDAY_0.CONFIRMED_DEL_DATE)))

错误发生在最后一行,这是我们自己编写的(大惊喜)。

微软查询中的图片:

错误:

【问题讨论】:

  • 您的查询有一些错误。例如“From”(来自什么?)和“Where”(为什么两个在哪里?)。
  • 用您正在使用的数据库标记您的问题。
  • 我可以输入完整的声明,这是一堵文字墙。但是我跳过了所有有效的无意义的东西,只是输入了错误发生的部分。
  • CONFIRMED_DEL_DATETOTAL_REP_LEADTIME是什么字段类型?我怀疑您的日期没有存储为日期,或者您的 TOTAL_REP_LEADTIME 不是数字(并且可能有一个包含非数字值的记录)。您不能对看起来像日期但不存储为日期的事物执行日期逻辑。你不能用不是数字的东西来做数学。另外,请分享您收到的错误。那里有丰富的信息。
  • 检查我的编辑@JNevill

标签: mysql sql integer


【解决方案1】:

您的错误似乎与您尝试操纵日期的方式有关。从您的查询中,很难准确理解您想要什么,但我相信您正在寻找类似于以下内容的内容:

SELECT *
FROM DB1ARTSTATDAY_0 a
JOIN JM5OPENORDERSDAY_0 AS b ON a.MATNR = b.MATNR 
                       AND a.PLANT = b.PLANT 
WHERE b.REQUESTED_DEL_DATE < DATE_ADD(CURDATE(), INTERVAL a.TOTAL_REP_LEADTIME DAY)

这会选择今天的日期在确认的删除日期加上 Total_rep_leadtime 列中的天数之后的值。

一个更易读的例子在这里工作:SQLFiddle

编辑:我使用表名的别名使查询更具可读性。

【讨论】:

  • 感谢您的回答!由于我缺乏经验和知识,我问的这个问题很糟糕,但多亏了你,我找到了一种让它发挥作用的方法!我为您提供了错误的逻辑...(抱歉),但是当我看到这段代码的编写方式时,我对其进行了一些更改,现在我相信它可以工作: JM5OPENORDERSDAY_0.REQUESTED_DEL_DATE
  • @Sam 太好了。我已经更新了我的答案以反映这一点。如果我的回答有帮助,请随时点赞,或将其标记为正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
相关资源
最近更新 更多