在工作中处理订单、会员注册或商品上架时间时,经常需要从数据库里查某一天、某个月甚至某个时间段的数据。这时候,光靠肉眼翻记录可不行,得靠SQL语句精准筛选。而日期字段的格式五花八门,怎么写查询才能对得上,就成了关键。
常见的日期格式长啥样
数据库里的日期可能像 2024-03-15 这样规整,也可能带时间:2024-03-15 08:30:22。有的系统还用 15/03/2024 或者时间戳 1710469822 存储。如果格式不匹配,查出来就是空的,让人一头雾水。
用标准格式查某一天的数据
比如想查2024年3月15号的所有订单,MySQL里可以这么写:
SELECT * FROM orders WHERE order_date = '2024-03-15';
但如果字段包含具体时间,就得用范围查询:
SELECT * FROM orders WHERE order_date >= '2024-03-15 00:00:00' AND order_date < '2024-03-16 00:00:00';
按月份或年份筛选更灵活
如果只想看2024年3月的数据,可以用函数提取年月:
SELECT * FROM orders WHERE YEAR(order_date) = 2024 AND MONTH(order_date) = 3;
或者直接用字符串匹配,前提是字段是标准格式:
SELECT * FROM orders WHERE order_date LIKE '2024-03%';
不同数据库的小差异
在SQL Server中,可以用 CONVERT 把日期转成指定格式:
SELECT * FROM orders WHERE CONVERT(varchar, order_date, 23) = '2024-03-15';
而在PostgreSQL里,常用 ::date 简化类型转换:
SELECT * FROM orders WHERE order_date::date = '2024-03-15';
这些写法虽然不一样,目的都是让查询条件和存储格式对上号。
避免踩坑的小建议
别直接拿用户输入的日期拼SQL,容易出错还可能被注入攻击。最好用参数化查询。另外,如果表数据量大,记得给日期字段加索引,查起来快得多。
搞清楚日期格式,就像学会看钟表一样,是处理数据的基本功。多试几次,慢慢就顺手了。