在日常工作中,很多人需要从数据库里提取特定时间段的数据,比如查上个月的订单、统计本周的用户注册量。这时候,掌握SQL查询日期格式就显得特别实用。不管是做报表、分析业务,还是写后台查询语句,正确处理日期能省下不少麻烦。
常见的日期字段类型
MySQL、PostgreSQL、SQL Server这些主流数据库都支持DATE、DATETIME和TIMESTAMP几种常见的时间类型。例如,一个订单表里的order_time可能是这样的:
2024-05-13 14:28:30
这是标准的日期时间格式,年-月-日 时:分:秒。如果只存日期,会是2024-05-13这种形式。
按日期筛选数据的基本写法
假设你想查2024年5月1日当天的所有订单,可以这样写:
SELECT * FROM orders WHERE order_date = '2024-05-01';
但要注意,如果字段是DATETIME类型,这条语句可能查不到数据,因为实际存储的是带时间的完整值。更稳妥的方式是用范围查询:
SELECT * FROM orders WHERE order_date >= '2024-05-01' AND order_date < '2024-05-02';
用函数提取日期部分
有些场景下,你只想比较日期部分,忽略时间。MySQL中可以用DATE()函数:
SELECT * FROM orders WHERE DATE(order_time) = '2024-05-01';
这条语句会把order_time中的时间截掉,只比对日期。不过要注意,对字段使用函数可能导致索引失效,大数据量时会变慢。
查询最近7天的数据
运营同事常问“最近一周的销量是多少”,你可以用INTERVAL来动态计算:
SELECT * FROM orders WHERE order_time >= NOW() - INTERVAL 7 DAY;
NOW()返回当前时间,减去7天就是一周前的同一时刻。这种方式不用手动算日期,特别适合写进定时脚本里。
格式化输出日期
有时候不需要原始格式,而是想显示成“2024年5月13日”这种可读性强的形式。MySQL的DATE_FORMAT就能派上用场:
SELECT DATE_FORMAT(order_time, '%Y年%m月%d日') AS friendly_date FROM orders LIMIT 5;
结果会是:2024年05月13日。常用的格式符有:%Y(四位年份)、%m(两位月份)、%d(两位日期),记住这些就够了。
处理不同数据库的差异
SQLite中没有DATE()函数,得用date(order_time)这种写法;而在SQL Server里,要用CONVERT(DATE, order_time)才能提取日期。不同系统语法略有区别,写跨平台查询时得多留意。
小技巧:查本月第一天到现在的数据
财务月底对账常用这个逻辑。MySQL里可以用DATE_SUB和LAST_DAY组合:
SELECT * FROM orders WHERE order_time >= DATE_SUB(DATE_SUB(CURDATE(), INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 0 MONTH);
其实更简单的写法是:
SELECT * FROM orders WHERE order_time >= DATE_FORMAT(NOW(), '%Y-%m-01');
直接取当前月份的第一天,简洁明了。