我有一张这样的桌子:

| name    |  salary |  day  |  month   |
| james   |  200.00 |    2  | january  |
| marie   |  400.00 |    4  | january  |
| jimmy   |  300.00 |    7  | january  |
| Fredd   |  700.00 |    3  | february |
| rosieli |  500.00 |    5  | february |
| rosela  |  800.00 |    6  | february |

如果表名是'db_table',我如何编写一个sql select查询来选择1月4日到2月5日的记录。
类似于:
select * from db_table between day='4',month='january' and day='5' and month='february'";

请告诉我如何编写正确的sql语句以获得所需的结果。这样,该表如下所示:
| name    |  salary |  day  |  month   |
| marie   |  400.00 |    4  | january  |
| jimmy   |  300.00 |    7  | january  |
| Fredd   |  700.00 |    3  | february |
| rosieli |  500.00 |    5  | february |

谢谢您

最佳答案

你真的应该用日期来做。

select t.*
from t
where str_to_date(concat_ws(2020, month, day), '%Y %M %d') between '2020-01-04' and '2020-02-05';

如有可能,应使用日期进行日期比较。
因为是闰年,所以我使用了2020,所以它将处理2月29日。
一旦解决了这个问题,您就应该修改数据模型,使其包含实际的日期,而不是月/日的组合。

10-08 02:21