【问题标题】:SQL Query to find invoices where invoicedate is over due from a date rangeSQL 查询以查找发票日期在某个日期范围内到期的发票
【发布时间】:2016-02-18 09:16:28
【问题描述】:

我有两个输入字段 [开始日期] - [结束日期]

每当您在 YYYY-MM-DD 中输入日期范围时,例如:[2015-12-01] - [2015-12-05]

我想进行 SQL 查询以找出在该期间到期的发票。

数据库中没有存储到期日期的列,只有 invoice_date。

到期日始终为 invoice_date + 17 天

有没有办法从中提取相关发票?

这是我当前的查询,但它只选择已在该范围内生成的发票。

我希望它找到在上述输入范围内到期的人

 select * from orders
        inner join 
        order_invoice on order_invoice.id_order = orders.id_order
        where (current_state = 14) and 
        orders.date_add >= "'.$start_date.'" and
        orders.date_add <= "'.$end_date.'" and
        now() >= DATE_ADD(order_invoice.date_add, INTERVAL 17 DAY)

【问题讨论】:

  • mssql:due_date = dateadd(day,17,invoice_date)mysql:date_add(invoice_date, INTERVAL 17 DAYS)
  • 我已经尝试过这个解决方案,但它只将查询跨度延长了 17 天,我希望它找到过期的发票(其中 date_add+17 在上面输入的范围内)@Used_By_Already
  • 对于 SQL 服务器:使用 where 子句作为 'dateadd(day,17,invoice_date) BETWEEN [startdate] AND [enddate]'
  • 标签上写着 mySql and Sql Server,但语法上写着 MySql,基于此,我已从您的问题中删除了 Sql-Server 标签。
  • 在 now() 的最后一个条件中使用 OR 代替 and。

标签: mysql sql date


【解决方案1】:

将您的范围([start_date][end_date])移动 17 天后(从日期参数中减去),您将获得 date_add 的范围。没有区别:将 17 天添加到 date_add 或从两个范围边界中减去相同的值。

而且我实际上不明白now() 函数在过滤谓词中的作用。似乎它与描述的任务不对应。可能您必须为[end_date] 想出一些正确的当前日期/未来处理方式。

【讨论】:

  • 所以我应该使用这种方法来获得正确的结果? ... ps_order_invoice.date_add >= DATE_SUB('START_DATE', INTERVAL 17 DAY) 和 ps_order_invoice.date_add
猜你喜欢
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 2016-12-16
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多