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

ตั้งค่า Boolean จาก Timestamp Column ใน MySQL ด้วย IF

วันที่ปัจจุบัน

mysql> SELECT CURDATE();
+------------+
| curdate()  |
+------------+
| 2019-12-10 |
+------------+

การเตรียมข้อมูล

mysql> CREATE TABLE DemoTable1890 (DueDate TIMESTAMP);

mysql> INSERT INTO DemoTable1890 VALUES
    ('2017-12-10'), ('2021-12-10'), ('2018-04-24'), ('2020-05-11');

ตั้งค่า Boolean: เก่ากว่า 2 ปี = true

mysql> SELECT IF(DueDate > CURDATE() - INTERVAL 2 YEAR, FALSE, TRUE) AS Status
    FROM DemoTable1890;

ผลลัพธ์ (1=True=เก่ากว่า 2 ปี, 0=False=ใหม่กว่า 2 ปี):

+--------+
| Status |
+--------+
|      1 |  -- 2017-12-10 เก่า > 2 ปี
|      0 |  -- 2021-12-10 ใหม่ < 2 ปี
|      0 |  -- 2018-04-24 ใหม่ < 2 ปี (จาก 2019-12-10)
|      0 |  -- 2020-05-11 ใหม่ < 2 ปี
+--------+

IF() Function

IF(condition, true_value, false_value)
-- คืนค่า true_value ถ้า condition จริง, ไม่งั้น false_value

Boolean ใน MySQL

  • TRUE = 1, FALSE = 0
  • IS TRUE, IS FALSE, IS NOT TRUE, IS NOT FALSE
  • Non-zero = True, Zero = False ใน Context ที่ต้องการ Boolean

CASE WHEN Alternative (อ่านง่ายกว่า)

SELECT CASE 
    WHEN DueDate > CURDATE() - INTERVAL 2 YEAR THEN 'Recent'
    ELSE 'Old'
END AS Status
FROM DemoTable1890;

Index Performance

-- Good: SARGable
WHERE DueDate > DATE_SUB(CURDATE(), INTERVAL 2 YEAR)

-- Bad: Function on Column
WHERE DATEDIFF(CURDATE(), DueDate) > 730

กรณีใช้งานจริง

  • Flag ข้อมูลเก่า (Archived/Active)
  • Subscription Expired Check
  • Data Retention Policy
  • Reporting: Segment ตามอายุข้อมูล