Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

Query MySQL ด้วยเงื่อนไข Boolean 2 เงื่อนไข กรองวันที่ตามชั่วโมง

ใช้ 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'