我正在尝试选择数据,在插入数据时,它会在提交时自动插入日期。因此,当插入数据时,它会插入当前日期。 但是,在我的表格中,我有一周的开始,所以我试图选择那周内的数据:
mysql> select * from week;
+---------+------+------------+
| week_id | week | date |
+---------+------+------------+
| 1 | 1 | 2014-12-29 |
| 2 | 2 | 2015-01-05 |
| 3 | 3 | 2015-01-12 |
| 4 | 4 | 2015-01-19 |
| 5 | 5 | 2015-01-26 |
| 6 | 6 | 2015-02-02 |
| 7 | 7 | 2015-02-09 |
| 8 | 8 | 2015-02-16 |
| 9 | 9 | 2015-02-23 |
| 10 | 10 | 2015-03-02 |
| 11 | 11 | 2015-03-09 |
| 12 | 12 | 2015-03-16 |
| 13 | 13 | 2015-03-23 |
| 14 | 14 | 2015-03-30 |
| 15 | 15 | 2015-04-06 |
| 16 | 16 | 2015-04-13 |
| 17 | 17 | 2015-04-20 |
e.g。
select * from table where date='2015-04-06';
但是,由于插入日期为2015-04-10,因此不会选择和显示数据。检索该数据的唯一方法是:
select * from table where date='2015-04-10'; < when the data was inserted
所以我的问题是,是否有可能从那周开始选择那些数据? 因此,如果我从2015-04-06选择数据,它应显示2015-04-06至2015-04-12范围内的数据,这可能吗? 希望我已经正确解释过,解释一下有点难以尝试实现。如果需要,我可以添加更多信息。 注意:我试图在PHP中使用这个,所以日期是我只会使用一个变量,只是想我会说。
答案 0 :(得分:1)
由于本周将始终从开始的6天结束,您可以使用between
运算符和date_add
函数,如下所示:
(针对您的具体示例):
select *
from table
where date between '2015-04-06' and date_add('2015-04-06', interval 6 day)
使用php变量:
select *
from table
where date between '$name_of_dt_var' and date_add('$name_of_dt_var', interval 6 day)
答案 1 :(得分:1)
您还可以使用WEEK()函数将输入数据的日期与星期表中的星期进行比较。
答案 2 :(得分:0)
假设week
与week()
的值相同,则为:
select t.*
from table t
where week = week('2015-04-10');
即使数字不匹配,也可能是你有一些基准日期(例如2015-01-01和简单的算术会完成非常相似的事情)。
答案 3 :(得分:0)
我发现执行此类处理的最强大方法是将表格中的每个日期(在您的示例中为2015-04-10
)截断到午夜的前一个星期一。这样,您可以通过将每个项目分配到该周的第一天来计算每个项目的周。
这个小公式返回前一个星期一,给出DATE
或DATETIME
值。
FROM_DAYS(TO_DAYS(datestamp) -MOD(TO_DAYS(datestamp) -2, 7))
例如,
set @datestamp := '2015-04-10'
SELECT FROM_DAYS(TO_DAYS(@datestamp) -MOD(TO_DAYS(@datestamp) -2, 7))
产生值2015-04-06
。
因此,如果您有一个名为sale
的表格,您可以按周计算销售额:
SELECT SUM(amount) weekly_amount,
FROM_DAYS(TO_DAYS(datestamp) -MOD(TO_DAYS(datestamp) -2, 7)) week_beginning
FROM sale
GROUP BY FROM_DAYS(TO_DAYS(datestamp) -MOD(TO_DAYS(datestamp) -2, 7))
这是处理事情的一种非常方便的方式,因为它在年终转换时非常强大。 WEEK()
功能也不起作用。
如果您的商家规则规定您的周数从周日而不是周一开始,请使用-1
而不是-2
,如下所示。
FROM_DAYS(TO_DAYS(datestamp) -MOD(TO_DAYS(datestamp) -1, 7))