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

ลบ 3 ชั่วโมงจาก DATETIME ใน MySQL ด้วย DATE_SUB และ DATE_ADD

มี 2 วิธีหลักในการลบช่วงเวลาจากคอลัมน์ DATETIME หรือ TIMESTAMP ใน MySQL

วิธีที่ 1: DATE_SUB() - ลบช่วงเวลาโดยตรง

SELECT DATE_SUB(yourColumnName, INTERVAL 3 HOUR) FROM yourTableName;

วิธีที่ 2: DATE_ADD() - บวกช่วงเวลาลบ

SELECT DATE_ADD(yourColumnName, INTERVAL -3 HOUR) FROM yourTableName;

ตัวอย่างกับ NOW()

DATE_SUB

mysql> SELECT NOW();
+---------------------+
| now()               |
+---------------------+
| 2018-11-30 10:14:12 |
+---------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_SUB(NOW(), INTERVAL 3 HOUR);
+---------------------------------+
| date_sub(now(), interval 3 hour) |
+---------------------------------+
| 2018-11-30 07:14:25             |
+---------------------------------+
1 row in set (0.00 sec)

DATE_ADD (Interval ติดลบ)

mysql> SELECT NOW();
+---------------------+
| now()               |
+---------------------+
| 2018-11-30 10:13:23 |
+---------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_ADD(NOW(), INTERVAL -3 HOUR);
+----------------------------------+
| date_add(now(), interval -3 hour) |
+----------------------------------+
| 2018-11-30 07:13:28              |
+----------------------------------+
1 row in set (0.00 sec)

รูปแบบ INTERVAL ที่รองรับ

หน่วยตัวอย่าง
MICROSECONDINTERVAL 500 MICROSECOND
SECONDINTERVAL 30 SECOND
MINUTEINTERVAL 45 MINUTE
HOURINTERVAL 3 HOUR
DAYINTERVAL 7 DAY
WEEKINTERVAL 2 WEEK
MONTHINTERVAL 1 MONTH
QUARTERINTERVAL 1 QUARTER
YEARINTERVAL 1 YEAR
SECOND_MICROSECONDINTERVAL '30.5' SECOND_MICROSECOND
MINUTE_MICROSECONDINTERVAL '45.5' MINUTE_MICROSECOND
MINUTE_SECONDINTERVAL '45:30' MINUTE_SECOND
HOUR_MICROSECONDINTERVAL '3:30.5' HOUR_MICROSECOND
HOUR_SECONDINTERVAL '3:45:30' HOUR_SECOND
HOUR_MINUTEINTERVAL '3:45' HOUR_MINUTE
DAY_MICROSECONDINTERVAL '1 12:30:30.5' DAY_MICROSECOND
DAY_SECONDINTERVAL '1 12:30:30' DAY_SECOND
DAY_MINUTEINTERVAL '1 12:30' DAY_MINUTE
DAY_HOURINTERVAL '1 12' DAY_HOUR
YEAR_MONTHINTERVAL '1-6' YEAR_MONTH

ใช้กับคอลัมน์ตาราง

-- ลบ 3 ชั่วโมงจากคอลัมน์ created_at
SELECT id, created_at, DATE_SUB(created_at, INTERVAL 3 HOUR) AS three_hours_ago
FROM logs;

UPDATE ลบ 3 ชั่วโมงจริงในตาราง

UPDATE appointments 
SET appointment_time = DATE_SUB(appointment_time, INTERVAL 3 HOUR)
WHERE timezone = 'UTC' AND needs_adjustment = 1;

DATE_SUB vs DATE_ADD

ด้านDATE_SUBDATE_ADD (Negative)
ความอ่านง่ายชัดเจนกว่า (Semantic)อาจสับสน
ประสิทธิภาพเหมือนกันเหมือนกัน
แนะนำ✅ ใช้ DATE_SUB สำหรับการลบใช้เมื่อคำนวณ Dynamic