【问题标题】:Checking the range of the date input from the date on the database从数据库上的日期检查日期输入的范围
【发布时间】:2015-01-08 03:13:58
【问题描述】:

我有一个名为 nca 的表,这是它的值:

+--------+---------+------------+------------+---- ----------+----------+ | nca_id | nca_no |问题日期 | nca_数量 |帐户类型 |余额| +--------+---------+------------+------------+---- ----------+---------+ | 1 | 14-0001 | 2015-01-08 | 200000 |机械臂 | 0 | | 2 | 14-0002 | 2015-01-08 | 400000 |机械臂 | 0 | | 3 | 14-0003 | 2015-02-02 | 1000000 |机械臂 | 0 | | 4 | 14-0004 | 2015-02-02 | 300000 |机械臂 | 0 | | 5 | 14-0001 | 2015-01-08 | 250000 | DBP-信任 | 0 | | 6 | 14-0002 | 2015-01-08 | 400000 | DBP-信任 | 0 | +--------+---------+------------+------------+---- ----------+---------+

现在使用此查询,它可以显示基于 issue_date 的 nca_amount 的总和:

SELECT SUM(nca_amount) FROM nca WHERE account_type = 'ROP' AND issue_date = '2015-02-02'

它给出了 1300000 的结果,因为它将日期为 2015-02-02 的所有金额相加,并且如果您仅在查询本身上设置日期就可以正常工作。

但我有想要解决的方案。我有一个 html 表单,用户可以在其中输入他想要的日期。

如果用户输入 2015 年 2 月 23 日的日期,我希望这个日期输入引用我表中的 2015 年 2 月 2 日的 issue_date。我想要的是如果日期输入在 nca 表上 issue_date 的 MONTH 的范围内,这将引用在 nca 表上找到的 issue_date 并显示总和。例如:

user input_date = '2015-02-23' 指 issue_date = '2015-02-02'

因为输入的日期在我的 nca 表上找到的“2015-02-02”范围内,然后它可以像上面的查询一样显示总和。我该怎么做这个查询?任何人都可以帮助解决这个问题吗?提前致谢。

【问题讨论】:

  • 你可以做类似WHERE YEAR(issue_date) = YEAR('2015-02-02') AND MONTH(issue_date) = MONTH('2015-02-02')

标签: php mysql date


【解决方案1】:

如果要匹配月份:

SELECT SUM(nca_amount)
FROM nca
WHERE account_type = 'ROP' AND
      year(issue_date) = year('2015-02-02') and
      month(issue_date) = month('2015-02-02');

但是,这不允许查询使用issue_date 上的索引。为此,您需要将查询改写为:

SELECT SUM(nca_amount)
FROM nca
WHERE account_type = 'ROP' AND
      issue_date >= date(concat(left('2015-02-02', 7), '-01')) and
      issue_date <  date(concat(left('2015-02-02', 7), '-01')) + interval 1 month;

【讨论】:

  • 我喜欢这个答案,因为它解决了索引问题,但是第二个示例返回 null。 Fiddle
  • @scrowler 已修复。我认为我们三个人现在都需要为这个答案分享积分
  • 那行得通。但是如果输入的日期是例如:'2015-02-01' 并且我表上的 issue_date 是'2015-02-02',如果输入的日期在我表上的 issue_date 之前,则不能返回总和为输入日期的日期为“01”,issue_date 为“02”。我该怎么做?
  • @Larcy:所以基本上你需要获取从月初开始的所有 issue_date 到选定的日期?将issue_date &lt; date(concat(left('2015-02-02', 7), '-01')) 更改为issue_date &lt;= '2015-02-02'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 2020-07-08
相关资源
最近更新 更多