SQL查询最近1天、7天、30天、本月、上一月数据

本文介绍如何使用SQL查询不同时间段的数据,包括几小时、一天、昨天、最近七天、近30天、本月及上个月的数据筛选方法。通过具体SQL语句示例,帮助读者掌握时间范围查询的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

formIdList表名,createTime字段,只需改这俩

几个小时内的数据

DATE_SUB(NOW(), INTERVAL 5 HOUR)

今天

select * from formIdList where to_days(createTime) = to_days(now());

昨天

SELECT * FROM formIdList WHERE TO_DAYS( NOW( ) ) - TO_DAYS( createTime) <= 1

7天

SELECT * FROM formIdList where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(createTime)

近30天

SELECT * FROM formIdList where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(createTime)

本月

SELECT * FROM formIdList WHERE DATE_FORMAT( createTime, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )

上一月

SELECT * FROM formIdList WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( createTime, '%Y%m' ) ) =1
<think>好的,用户想知道如何使用SQL查询指定日期范围的数据。我需要根据提供的引用资料来整理回答。首先,引用[1]提到使用BETWEEN运算符,示例是SELECT * FROM your_table WHERE created_date BETWEEN 'start_date' AND 'end_date'。这应该是一个主要方法。然后引用[4]也提到了类似的内容,可以结合起来。 接下来,用户可能需要具体例子,比如查询固定日期、当前日期或动态计算日期的情况。引用[1]中的GETDATE()和固定日期格式'YYYY-MM-DD',引用[2]使用DateDiff函数查本月数据,引用[3]用DATE_SUB和INTERVAL处理数增减。这些都需要涵盖。 要注意不同的数据库系统可能有不同的函数,比如MySQL的CURDATE()和SQL Server的GETDATE(),需要区分开。同时,日期格式的一致性很重要,要提醒用户注意格式是否正确,避免错误。 另外,时间包含的问题,比如BETWEEN是否包含结束日期的午夜,可能需要说明使用>=和<来确保准确性。引用[4]中的示例可能没有考虑这一点,需要补充说明。 最后,整理结构,分点说明不同方法,并给出示例。确保使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$,但这里可能不需要数学公式,主要是代码块和日期格式说明。同时,生成相关问题,比如如何排除时间部分,或者处理不同数据库系统的差异。</think>要查询指定日期范围内的数据,可以通过以下4种方法实现: ### 一、使用BETWEEN运算符(精确范围) ```sql SELECT * FROM 表名 WHERE 日期字段 BETWEEN '起始日期' AND '结束日期'; ``` 示例:查询2023年11日至2023年12月31日的订单 ```sql SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'; ``` 注意:BETWEEN包含边界值,即包含起始日和结束日当数据[^4] ### 二、比较运算符(灵活控制边界) ```sql SELECT * FROM 表名 WHERE 日期字段 >= '起始日期' AND 日期字段 <= '结束日期'; ``` 优势:可单独控制上下边界,例如查询超过当前日期的数据: ```sql SELECT * FROM events WHERE start_date >= CURDATE(); -- MySQL -- SQL Server使用GETDATE() ``` ### 三、动态日期计算 1. **查询最近N数据**: ```sql -- MySQL SELECT * FROM logs WHERE log_time >= DATE_SUB(CURDATE(), INTERVAL 7 DAY); -- SQL Server SELECT * FROM logs WHERE log_time >= DATEADD(DAY, -7, GETDATE()); ``` 2. **查询本月数据**: ```sql SELECT * FROM sales WHERE MONTH(sale_date) = MONTH(CURDATE()) AND YEAR(sale_date) = YEAR(CURDATE()); ``` 3. **查询季度数据**: ```sql SELECT * FROM reports WHERE QUARTER(create_date) = 2 AND YEAR(create_date) = 2023; ``` ### 四、日期函数组合应用 ```sql -- 查询数据(MySQL) SELECT * FROM attendance WHERE DATE(check_in) = CURDATE(); -- 查询本周数据SQL Server) SELECT * FROM tasks WHERE DATEPART(WEEK, due_date) = DATEPART(WEEK, GETDATE()); ``` ### 注意事项 1. 日期格式必须与数据库存储格式一致,推荐使用$'YYYY-MM-DD$'格式 2. 处理时间戳时建议转换为日期比较: ```sql SELECT * FROM sensor_data WHERE DATE(log_time) BETWEEN '2023-06-01' AND '2023-06-30'; ``` 3. 不同数据库的日期函数差异: - MySQL:$CURDATE()$, $DATE_SUB()$ - SQL Server:$GETDATE()$, $DATEADD()$ - Oracle:$SYSDATE$, $ADD_MONTHS()$[^1][^2][^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个......

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值