ใช้ EXTRACT(HOUR FROM datetime) ดึงชั่วโมง แล้วกรองด้วย NOT BETWEEN
ตัวอย่างการใช้งาน
1. สร้างตารางและข้อมูล
mysql> CREATE TABLE DemoTable (AdmissionDate DATETIME);
mysql> INSERT INTO DemoTable VALUES
('2019-01-10 10:45:10'), ('2019-02-12 20:50:00'), ('2019-02-12 16:10:19');
2. Query: ชั่วโมงไม่อยู่ระหว่าง 8-10 น.
mysql> SELECT * FROM DemoTable
-> WHERE EXTRACT(HOUR FROM AdmissionDate) NOT BETWEEN 8 AND 10;
ผลลัพธ์ (ตัด 10:45 ออก เหลือ 20:50 และ 16:10)
+---------------------+ | AdmissionDate | +---------------------+ | 2019-02-12 20:50:00 | | 2019-02-12 16:10:19 | +---------------------+
ฟังก์ชัน EXTRACT อื่นๆ
EXTRACT(YEAR FROM dt) -- ปี EXTRACT(MONTH FROM dt) -- เดือน EXTRACT(DAY FROM dt) -- วัน EXTRACT(HOUR FROM dt) -- ชั่วโมง EXTRACT(MINUTE FROM dt) -- นาที EXTRACT(SECOND FROM dt) -- วินาที EXTRACT(DAY_MICROSECOND FROM dt) -- วัน+ไมโครวินาที
วิธีเขียนแบบ Standard SQL (ANSI)
WHERE HOUR(AdmissionDate) NOT BETWEEN 8 AND 10
HOUR() เป็น MySQL-specific, EXTRACT เป็น ANSI Standard
ประสิทธิภาพ: หลีกเลี่ยงฟังก์ชันบนคอลัมน์
-- แทน EXTRACT(HOUR FROM col) NOT BETWEEN 8 AND 10 -- ใช้ Range Query (ต้องมี Index) WHERE AdmissionDate < '2019-01-10 08:00:00' OR AdmissionDate >= '2019-01-10 11:00:00'