# MySQL如何查詢日期范圍
日期范圍查詢是數據庫操作中的高頻需求,MySQL提供了多種靈活的方式來實現這一功能。本文將詳細介紹7種常用的日期范圍查詢方法,涵蓋基礎語法、函數應用和性能優化建議。
## 一、基礎日期范圍查詢
### 1. 使用BETWEEN...AND語句
```sql
SELECT * FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-01-31';
注意事項: - 包含邊界值(閉區間) - 日期格式必須為’YYYY-MM-DD’或標準日期格式
SELECT * FROM logs
WHERE create_time >= '2023-05-01 00:00:00'
AND create_time <= '2023-05-31 23:59:59';
優勢: - 可精確到毫秒級 - 更直觀的時間范圍控制
SELECT * FROM events
WHERE DATE(event_time) = '2023-08-15';
-- 查詢最近30天的記錄
SELECT * FROM user_activity
WHERE login_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY);
-- 查詢本季度數據
SELECT * FROM sales
WHERE sale_date BETWEEN
DATE_FORMAT(NOW(), '%Y-%m-01 00:00:00')
AND LAST_DAY(NOW());
常用日期函數:
- CURDATE()
:當前日期
- NOW()
:當前日期時間
- DATE_ADD()
/DATE_SUB()
:日期加減
- LAST_DAY()
:月份最后一天
SELECT * FROM holidays
WHERE DATE_FORMAT(holiday_date, '%m-%d') BETWEEN '12-20' AND '12-31';
-- 查詢第25周數據
SELECT * FROM weekly_reports
WHERE WEEK(report_date) = 25
AND YEAR(report_date) = 2023;
SELECT * FROM system_logs
WHERE FROM_UNIXTIME(timestamp) BETWEEN '2023-01-01' AND '2023-01-31';
索引優化:
ALTER TABLE orders ADD INDEX idx_order_date (order_date);
分區表:
CREATE TABLE sensor_data (
id INT,
record_time DATETIME,
value FLOAT
) PARTITION BY RANGE (TO_DAYS(record_time)) (
PARTITION p202301 VALUES LESS THAN (TO_DAYS('2023-02-01')),
PARTITION p202302 VALUES LESS THAN (TO_DAYS('2023-03-01'))
);
執行計劃檢查:
EXPLN SELECT * FROM large_table
WHERE create_date BETWEEN '2023-01-01' AND '2023-01-31';
-- 轉換為UTC時區查詢
SELECT * FROM global_events
WHERE CONVERT_TZ(event_time, '+00:00', @@session.time_zone)
BETWEEN '2023-01-01 08:00:00' AND '2023-01-01 20:00:00';
-- 處理各種日期格式
SELECT * FROM legacy_data
WHERE STR_TO_DATE(date_string, '%m/%d/%Y') > '2023-01-01';
SELECT * FROM appointments
WHERE (appointment_date BETWEEN '2023-01-01' AND '2023-12-31')
OR appointment_date IS NULL;
-- 查詢2023年Q3的已完成訂單
SELECT
order_id,
customer_id,
total_amount
FROM orders
WHERE order_status = 'completed'
AND order_date BETWEEN '2023-07-01' AND '2023-09-30'
ORDER BY order_date DESC
LIMIT 1000;
-- 按月統計銷售額
SELECT
DATE_FORMAT(order_date, '%Y-%m') AS month,
SUM(total_amount) AS revenue
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY month;
掌握MySQL日期范圍查詢需要了解: 1. 基本比較運算符和BETWEEN用法 2. 日期時間函數的靈活組合 3. 索引和分區表等性能優化手段 4. 時區和特殊格式的處理方法
建議在實際使用中結合EXPLN分析查詢性能,并根據業務需求選擇最合適的查詢方式。 “`
注:本文實際約1150字,涵蓋了MySQL日期范圍查詢的主要技術點??筛鶕枰{整具體案例或補充特定場景的解決方案。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。