快来帮忙!只有 YYYY-MM 年月的时间怎么比较大小?

2021-04-27 09:47:48 +08:00
 manami

遇到这种表设计,叔叔要生气了!/doge

有个表 aaa 的时间字段前同事只存了 YYYY-MM,比如 2021-01 这种格式

ID money create_time
1 xxx 2021-01
2 xxx 2021-02
3 xxx 2021-03
4 xxx 2021-04

现在有个需求是前端传开始月份和结束月份来过滤记录。比如传 beginMonth 为 2021-02 、endMonth 为 2021-04 进来要得到 2 月、3 月和 4 月的数据

数据库用的是 MySQL,ORM 框架用的是 Mybatis

我试了几种方式都不成功,比如这样

beginMonth 和 endMonth 转成了日期传进来

SELECT
    *
FROM
    aaa
WHERE
    create_time >= #{beginMonth} 
AND
    create_time <= #{endMonth}

又比如这样

begMonth 和 endMonth 字符串的形式传进来

SELECT
    *
FROM
    aaa
WHERE
    DATE_FORMAT(create_time , '%Y-%m') >= #{beginMonth}
AND
    DATE_FORMAT(create_time , '%Y-%m') <= #{endMonth}

都没法得到正确的返回。求助……

Thanks in advance !

4202 次点击
所在节点    MySQL
26 条回复
Jimmy1573
2021-04-27 11:37:49 +08:00
@manami #13 女叔叔也是叔( doge
zoharSoul
2021-04-27 11:46:10 +08:00
字符串可以直接比较的, 不要那样转换, 那样转换索引失效的.
eric96
2021-04-27 11:49:06 +08:00
timestamp 不是可以直接和字符串做比较吗,也一样能用到索引
buster
2021-04-27 14:45:02 +08:00
where create_time between '2021-02' and '2021-04'
TomVista
2021-04-27 15:31:25 +08:00
这样的同事请务必给我来一打
boolstone
2021-04-28 09:46:44 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/773526

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX