如何查询指定日期及之后的日期数据
日期范围查询的正确写法
你当前的SQL把日期转成字符串做精确匹配,所以只能查到指定当天的数据。要实现“指定日期及之后所有数据”的需求,直接用日期比较运算符即可,没必要转字符串(转字符串会浪费索引,还容易因为格式问题出错)。
基础写法(适用于日期/日期时间类型字段)
如果start_date是date或datetime类型,直接用>=运算符:
SELECT * FROM user u WHERE u.start_date >= '2012-12-24'
这个语句会返回所有start_date在2012-12-24 00:00:00及之后的数据。
处理带时分秒的场景
如果start_date是datetime类型,且你需要精确筛选某一天及之后的数据,更高效的写法是用明确的范围边界(这种写法能让数据库用上start_date字段的索引):
-- 示例:查询2012-12-24及之后的所有数据 SELECT * FROM user u WHERE u.start_date >= '2012-12-24'
如果是要单独查询2012-12-24全天的数据,可以这么写:
SELECT * FROM user u WHERE u.start_date >= '2012-12-24' AND u.start_date < '2012-12-25'
特殊情况:日期存为字符串
如果你的start_date是字符串类型(不推荐这么存储日期),只要格式是YYYY-MM-DD这种标准格式,也可以用同样的>=比较,因为字符串的字典序和日期顺序一致:
SELECT * FROM user u WHERE u.start_date >= '2012-12-24'
内容的提问来源于stack exchange,提问作者uncleben666
相关产品推荐
相关产品推荐

