V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yuann72
V2EX  ›  问与答

mysql 筛选某一天的记录的正确姿势是什么

  •  
  •   yuann72 · 61 天前 · 1072 次点击
    这是一个创建于 61 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一张表有一个created_at字段, timestamp类型, 现想要筛选出某一天的全部数据

    1. select * from XX where date(created_at) = '2021-01-01'
      全表扫描 pass
    2. select * from XX where created_at between '2021-01-01 00:00:00' and '2021-01-01 23:59:59'
      select * from XX where created_at >='2021-01-01 00:00:00' and created_at <= '2021-01-01 23:59:59'
      这种方式 where 条件就得加上 00:00:00 和 23:59:59
    3. 还有其他方式吗
    13 条回复    2021-06-05 08:09:21 +08:00
    mouxiaoshi
        1
    mouxiaoshi   61 天前
    我们公司的业务是直接把业务日期字段(非创建时间字段)拆成了 year,month,day 的粒度,方便按年,月,日的组合查询
    AoEiuV020
        2
    AoEiuV020   61 天前
    感觉这个 2 就比较合理了吧,1 是不是无法使用索引了,
    yuann72
        3
    yuann72   61 天前
    @AoEiuV020 #2 我就是觉得 2 不够"优雅", 想看看还有没有其他方式
    lychs1998
        4
    lychs1998   61 天前
    我可能会写成:
    select * from XX where created_at >='2021-01-01 00:00:00' and created_at < '2021-01-02 00:00:00'

    或者:
    BETWEEN '2021-01-01 00:00:00' AND '2021-01-02 00:00:00'
    (但这个我忘了 00 是前一天还是后一天的了。)

    其实我是把数据库里所有时间相关字段设置为时间戳。因为时间戳对所有开发语言是通用的而且都有封装的操作库。而且数据库的查询效率很高。timestap 还会受到时区影响吧。
    carity
        5
    carity   61 天前
    2 少查了一秒数据
    raaaaaar
        6
    raaaaaar   61 天前 via Android
    @carity 没有吧
    liuzhaowei55
        7
    liuzhaowei55   61 天前 via iPhone   ❤️ 1
    2 楼说的是对的,函数无法使用索引
    sagaxu
        8
    sagaxu   61 天前 via Android
    select * from XX where created_at >= '2021-01-01' and created_at < '2021-01-02'
    shingle
        9
    shingle   61 天前 via iPhone
    楼上+1 只精确到日期,默认就会补全到 0 点
    akira
        10
    akira   61 天前
    2. 或者加个字段放日期
    gasia
        11
    gasia   61 天前 via Android
    @raaaaaar 是的,没有
    wy315700
        12
    wy315700   60 天前 via iPhone   ❤️ 1
    >= 2021-01-01
    and < 2021-01-02
    Jaron0608
        13
    Jaron0608   60 天前 via Android
    加个字段,日期分区
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   951 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 97ms · UTC 21:01 · PVG 05:01 · LAX 14:01 · JFK 17:01
    ♥ Do have faith in what you're doing.