1. Introduction
BETWEEN operator ใน MySQL เป็นฟีเจอร์ที่สะดวกซึ่งช่วยให้คุณดึงข้อมูลภายในช่วงวันที่ที่กำหนดโดยใช้คำสั่งง่าย ๆ ตัวอย่างเช่น มันมีประโยชน์เมื่อดึงข้อมูลยอดขายรายเดือนหรือค้นหาผู้ใช้ที่วันที่ลงทะเบียนอยู่ในช่วงเวลาหนึ่ง
อย่างไรก็ตาม เมื่อใช้ BETWEEN คุณต้องใส่ใจว่าประเภทข้อมูลเช่น DATE และ DATETIME ถูกจัดการอย่างไร รวมถึงปัญหาด้านประสิทธิภาพที่อาจเกิดขึ้น ในบทความนี้เราจะอธิบายทุกอย่างตั้งแต่การใช้งานพื้นฐานจนถึงเทคนิคขั้นสูงอย่างละเอียด
2. Basics of the MySQL BETWEEN Operator
2.1 Basic Syntax of BETWEEN
BETWEEN operator ใช้เพื่อดึงค่าที่อยู่ในช่วงที่ระบุ มีไวยากรณ์พื้นฐานดังต่อไปนี้
SELECT * FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31';
คำสั่งนี้ดึงข้อมูลที่ order_date ตั้งแต่ 1 มกราคม 2024 ถึง 31 มกราคม 2024 จุดสำคัญคือ BETWEEN รวมทั้งวันที่เริ่มต้นและวันที่สิ้นสุด
2.2 BETWEEN vs. Comparison Operators (>= AND <=)
เพื่อให้ได้ผลลัพธ์เดียวกัน คุณสามารถผสานตัวดำเนินการเปรียบเทียบเช่น >= และ <= ได้เช่นกัน
SELECT * FROM orders
WHERE order_date >= '2024-01-01' AND order_date <= '2024-01-31';
ข้อดีของ BETWEEN:
- ไวยากรณ์ง่ายและอ่านง่าย
ข้อดีของ >= AND <=:
- ให้การควบคุมเงื่อนไขช่วงได้ละเอียดมากขึ้น (เช่น การยกเว้นเวลาที่เฉพาะเจาะจง)
ตัวอย่างเช่น เมื่อใช้ BETWEEN กับคอลัมน์ DATETIME การรวมข้อมูลเวลาอาจทำให้ดึงข้อมูลที่ไม่ต้องการออกมา เราจะอธิบายรายละเอียดนี้ในส่วนต่อไป
3. Important Considerations When Using BETWEEN
3.1 Handling Columns That Include Time Information
การใช้ BETWEEN กับคอลัมน์ DATETIME อาจทำให้ได้ผลลัพธ์ที่ไม่คาดคิด
SELECT * FROM users
WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31';
ในคำสั่งนี้จะดึงข้อมูลจนถึง 2024-01-31 00:00:00 เท่านั้น ซึ่งหมายความว่า บันทึกที่สร้างหลังเที่ยงคืนของวันที่ 31 มกราคมจะถูกตัดออก
3.2 Correct Way to Specify Date Ranges
เพื่อแก้ปัญหานี้ วิธีที่มีประสิทธิภาพคือ ตั้งค่าวันสิ้นสุดให้เป็นค่าน้อยกว่าวันถัดไป
SELECT * FROM users
WHERE created_at >= '2024-01-01' AND created_at < '2024-02-01';
โดยใช้ >= และ < แบบนี้ คุณสามารถ ดึงบันทึกทั้งหมดของวันที่ 31 มกราคมได้อย่างเชื่อถือได้

4. BETWEEN and Performance Optimization
4.1 Relationship Between Indexes and BETWEEN
BETWEEN operator ทำงานได้อย่างมีประสิทธิภาพเมื่อมีการกำหนดดัชนีที่เหมาะสม อย่างไรก็ตาม หากคุณใช้ฟังก์ชัน DATE() ดัชนีอาจไม่ถูกใช้ ดังนั้นต้องระมัดระวัง
-- Index will not be used (not recommended)
SELECT * FROM users
WHERE DATE(created_at) BETWEEN '2024-01-01' AND '2024-01-31';
คำสั่งที่แนะนำ:
SELECT * FROM users
WHERE created_at >= '2024-01-01' AND created_at < '2024-02-01';
4.2 Query Optimization Using EXPLAIN
เพื่อยืนยันประสิทธิภาพ การใช้คำสั่ง EXPLAIN จะเป็นประโยชน์
EXPLAIN SELECT * FROM users WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31';
สิ่งนี้ช่วยให้คุณ ตรวจสอบดัชนีที่ใช้และแผนการดำเนินการ
5. Common Mistakes and How to Fix Them
5.1 Retrieving an Unintended Range with BETWEEN
แม้จะใช้ BETWEEN แต่ข้อมูลที่ไม่ต้องการอาจถูกรวมหรือถูกตัดออกหากไม่ได้พิจารณาข้อมูลเวลา เป็นแนวปฏิบัติที่ดีที่สุดคือ ผสาน >= และ < เข้าด้วยกัน
5.2 Queries That Disable Indexes
เงื่อนไขที่ใช้ฟังก์ชันเช่น DATE() หรือ CAST() อาจทำให้ดัชนีไม่ทำงาน หากเป็นไปได้ ควร เขียนคำสั่งใหม่ให้เปรียบเทียบค่าตรง ๆ
6. Frequently Asked Questions (FAQ)
Q1: Does BETWEEN include both the start and end dates?
→ ใช่, BETWEEN รวมขอบเขตทั้งสองของช่วงที่ระบุ.
Q2: Should I use BETWEEN or >= AND <=?
→ ใช้ BETWEEN สำหรับเงื่อนไขช่วงแบบง่าย หากคุณต้องการคำนึงถึงข้อมูลเวลา, แนะนำให้ใช้ >= AND <.
Q3: การใช้ BETWEEN ทำให้คิวรีช้าลงหรือไม่?
→ หากคุณใช้ฟังก์ชันเช่น DATE() หรือ CAST(), ดัชนีอาจไม่ถูกใช้. แนะนำให้ใช้การเปรียบเทียบโดยตรง.
7. ตัวอย่างคิวรีเชิงปฏิบัติสำหรับการใช้งานจริง
7.1 ดึงข้อมูลสำหรับเดือนที่ระบุ
WHERE created_at BETWEEN '2024-02-01' AND '2024-02-28';
7.2 ดึงข้อมูลของวันนี้
WHERE created_at BETWEEN CURDATE() AND CURDATE() + INTERVAL 1 DAY;
7.3 ดึงข้อมูลจาก 30 วันที่ผ่านมา
WHERE created_at BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE();
8. สรุป
- ตัวดำเนินการ
BETWEENอนุญาตให้ระบุช่วงวันที่ได้อย่างง่าย , แต่ต้องระมัดระวังเป็นพิเศษเมื่อจัดการกับประเภทDATETIME. BETWEENรวมทั้งวันที่เริ่มต้นและสิ้นสุด , ดังนั้นการกำหนดช่วงที่ถูกต้องจึงเป็นสิ่งสำคัญ.- การใช้ดัชนีเป็นสิ่งสำคัญสำหรับการเพิ่มประสิทธิภาพ , ควรหลีกเลี่ยงการใช้ฟังก์ชัน
DATE(). - การใช้
>= AND <ทำให้ การระบุช่วงที่เชื่อถือได้มากขึ้น .
นี่คือการสรุปคำอธิบายของจุดสำคัญเมื่อใช้ตัวดำเนินการ BETWEEN ใน MySQL เราหวังว่าสิ่งนี้จะช่วยคุณในการพัฒนาในโลกจริง!


