从数据库上的日期检查输入日期的范围
Checking the range of the date input from the date on the database
我有一个名为 nca 的 table,下面是它的值:
+--------+--------+------------+------------+---- ----------+--------+
| nca_id | nca_no | issue_date | nca_amount | account_type |余额|
+--------+--------+------------+------------+---- ----------+--------+
| 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 |
+--------+--------+------------+------------+---- ----------+--------+
现在使用此查询,它可以显示 nca_amount 基于 issue_date:
的 SUM
SELECT SUM(nca_amount) FROM nca WHERE account_type = 'ROP' AND issue_date = '2015-02-02'
结果为 1300000,因为它添加了日期为 2015-02-02 的所有金额,如果您仅在查询本身上设置日期,就可以正常工作。
但是我有想解决的场景。我有一个 html 表单,用户可以在其中输入他想要的日期。
如果用户输入 2015-02-23 的日期,我希望此日期输入参考我的 table 中的 2015-02-02 的 issue_date。我想要的是,如果日期输入在 nca table 上 issue_date 的 MONTH 的范围内,这将指的是在 nca table 上找到的 issue_date并显示总和。例如:
用户 input_date = '2015-02-23' 指的是 issue_date = '2015-02-02'
因为输入的日期在我的 nca table 上找到的“2015-02-02”范围内,然后它可以像我上面的查询一样显示总和。我该如何做这个查询?任何人都可以帮忙吗?提前致谢。
如果要匹配月份:
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;
我有一个名为 nca 的 table,下面是它的值:
+--------+--------+------------+------------+---- ----------+--------+ | nca_id | nca_no | issue_date | nca_amount | account_type |余额| +--------+--------+------------+------------+---- ----------+--------+ | 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 | +--------+--------+------------+------------+---- ----------+--------+
现在使用此查询,它可以显示 nca_amount 基于 issue_date:
的 SUMSELECT SUM(nca_amount) FROM nca WHERE account_type = 'ROP' AND issue_date = '2015-02-02'
结果为 1300000,因为它添加了日期为 2015-02-02 的所有金额,如果您仅在查询本身上设置日期,就可以正常工作。
但是我有想解决的场景。我有一个 html 表单,用户可以在其中输入他想要的日期。
如果用户输入 2015-02-23 的日期,我希望此日期输入参考我的 table 中的 2015-02-02 的 issue_date。我想要的是,如果日期输入在 nca table 上 issue_date 的 MONTH 的范围内,这将指的是在 nca table 上找到的 issue_date并显示总和。例如:
用户 input_date = '2015-02-23' 指的是 issue_date = '2015-02-02'
因为输入的日期在我的 nca table 上找到的“2015-02-02”范围内,然后它可以像我上面的查询一样显示总和。我该如何做这个查询?任何人都可以帮忙吗?提前致谢。
如果要匹配月份:
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;