mysql> select concat(yearval,weekval) as val1,concat(year(curdate()),week(curdate())) as val2 from wbr_weekly;
+-------+--------+
| val1 | val2 |
+-------+--------+
| 20161 | 201614 |
| 20162 | 201614 |
| 20163 | 201614 |
| 20164 | 201614 |
| 20165 | 201614 |
| 20161 | 201614 |
| 20162 | 201614 |
| 20163 | 201614 |
| 20164 | 201614 |
| 20165 | 201614 |
| 20161 | 201614 |
| 20162 | 201614 |
| 20163 | 201614 |
| 20164 | 201614 |
| 20165 | 201614 |
+-------+--------+
15 rows in set (0.00 sec)
并且
mysql> select concat(yearval,weekval) as val1 from wbr_weekly where concat(yearval,weekval) < concat(year(curdate()),week(curdate()));
+-------+
| val1 |
+-------+
| 20161 |
| 20161 |
| 20161 |
+-------+
3 rows in set (0.00 sec)
我的目标是返回比当前星期少的所有星期。我认为第二次查询会做什么。但事实并非如此。有人可以解释我的查询出了什么问题吗?
答案 0 :(得分:1)
在字符串比较中,&#34; 20161&#34;,&#34; 20162&#34;等等将始终在lexigraphically小于&#34; 201614&#34;。您需要使用前导零填充周数以使比较工作:&#34; 201601&#34;,&#34; 201602&#34;等等:
select concat(yearval,weekval) as val1 from wbr_weekly
where concat(yearval, right(concat('0', weekval), 2))
< concat(year(curdate()),week(curdate()));
答案 1 :(得分:0)
数据库正在进行字符串比较,而不是您想要的所需数字比较。将字符串“20165”与“201614”进行比较时,“20165”大于“201614”。
我的建议是:
where yearval < year(curdate()) OR (yearval = year(curdate()) AND weekval < week(curdate()))