คู่มือวันที่และเวลา MySQL: ชนิดข้อมูล, ฟังก์ชัน, การจัดรูปแบบ, และการค้นหาช่วงเวลา

目次

1. บทนำ

MySQL เป็นระบบจัดการฐานข้อมูลที่ได้รับความนิยมอย่างกว้างขวางสำหรับการสร้างเว็บแอปพลิเคชันและฐานข้อมูล และการจัดการข้อมูลวันที่อย่างถูกต้องเป็นสิ่งสำคัญโดยเฉพาะ ตัวอย่างเช่น ข้อมูลที่เกี่ยวกับวันที่ปรากฏในหลายสถานการณ์: การจัดการบทความบล็อก, การติดตามประวัติการขายสินค้า, และการเก็บประวัติการเข้าสู่ระบบของผู้ใช้ การจัดการข้อมูลวันที่อย่างถูกต้องจะช่วยให้คุณประมวลผลข้อมูลได้อย่างมีประสิทธิภาพและให้ข้อมูลที่แม่นยำแก่ผู้ใช้

ในคู่มือนี้ เราจะอธิบายอย่างครบถ้วนตั้งแต่ประเภทข้อมูลวันที่/เวลาเบื้องต้นและวิธีใช้ฟังก์ชันวันที่ใน MySQL ไปจนถึงการคำนวณตามวันที่และการค้นหาแบบช่วงเวลา เนื้อหานี้ออกแบบมาสำหรับผู้เริ่มต้นถึงผู้ใช้ระดับกลาง และเราจะรวมตัวอย่างการคิวรีที่เป็นประโยชน์จากกรณีการใช้งานจริง—ทำให้เป็นประโยชน์ต่อการทำงานประจำวัน

โดยการอ่านบทความนี้ คุณจะสามารถทำสิ่งต่อไปนี้ได้

  • เข้าใจลักษณะของประเภทข้อมูลวันที่/เวลาใน MySQL และเลือกประเภทที่เหมาะสมสำหรับข้อมูลของคุณ
  • ใช้ฟังก์ชันวันที่เพื่อดึงและจัดการวันที่ปัจจุบัน, วันที่ในอดีต, และวันที่ในอนาคตได้อย่างง่ายดาย
  • ดึงข้อมูลสำหรับช่วงเวลาที่กำหนดโดยการทำการค้นหาและเปรียบเทียบช่วงวันที่

ต่อไปนี้ เราจะมาดูพื้นฐานของวันที่ใน MySQL ตั้งแต่ส่วนต่อไปนี้

2. ภาพรวมของประเภทข้อมูลวันที่/เวลา MySQL

เมื่อจัดการวันที่ใน MySQL การเลือกประเภทข้อมูลวันที่/เวลาที่เหมาะสมตามข้อมูลและกรณีการใช้งานเป็นสิ่งสำคัญ MySQL มีประเภทข้อมูลหลายประเภทสำหรับจัดการวันที่และเวลา แต่ละประเภทมีลักษณะและการใช้งานที่แตกต่างกัน ในส่วนนี้เราจะอธิบายประเภทวันที่/เวลาหลักและกรณีการใช้งานทั่วไปของแต่ละประเภทอย่างละเอียด

DATE

ประเภท DATE จะเก็บเฉพาะวันที่ (ปี, เดือน, วัน) โดยไม่มีส่วนของเวลา ช่วงที่รองรับคือจาก “1000-01-01” ถึง “9999-12-31” ทำให้สามารถจัดการวันที่ตั้งแต่ปี 1000 ถึง 9999 ได้ เหมาะสำหรับข้อมูลที่ต้องการเพียงวันที่เท่านั้น เช่น วันเกิดหรือวันครบรอบ

CREATE TABLE users (
    id INT,
    name VARCHAR(50),
    birth_date DATE
);

TIME

ประเภท TIME จะเก็บเวลา (ชั่วโมง, นาที, วินาที) ช่วงที่รองรับคือจาก “-838:59:59” ถึง “838:59:59” เนื่องจากสามารถแสดงเวลาเป็นค่าลบได้ จึงสามารถใช้เพื่อบ่งบอกความแตกต่างของเวลาได้เช่นกัน เหมาะสำหรับบันทึกชั่วโมงทำงานหรือระยะเวลาของงาน

CREATE TABLE work_log (
    id INT,
    task_name VARCHAR(50),
    duration TIME
);

DATETIME

ประเภท DATETIME จะเก็บทั้งวันที่และเวลา ช่วงที่รองรับคือจาก “1000-01-01 00:00:00” ถึง “9999-12-31 23:59:59” ไม่ขึ้นกับเขตเวลา และคุณสามารถดึงค่าที่เก็บไว้ได้อย่างตรงตามที่บันทึกไว้ เหมาะสำหรับบันทึกเวลาประทับของเหตุการณ์ในอดีตหรือกำหนดการในอนาคต

CREATE TABLE appointments (
    id INT,
    description VARCHAR(50),
    appointment_datetime DATETIME
);

TIMESTAMP

ประเภท TIMESTAMP จะเก็บวันที่และเวลาและจะทำการแปลงค่าอัตโนมัติตามเขตเวลาเซิร์ฟเวอร์ ช่วงที่รองรับคือจาก “1970-01-01 00:00:01 UTC” ถึง “2038-01-19 03:14:07 UTC” เข้ากันได้กับเวลา Unix epoch และเหมาะสำหรับบันทึกเวลาประทับและประวัติการเปลี่ยนแปลง นอกจากนี้ TIMESTAMP สามารถตั้งค่าเป็นเวลาปัจจุบันโดยค่าเริ่มต้น ทำให้สะดวกสำหรับการบันทึกเวลาการสร้างและการอัปเดตโดยอัตโนมัติ

CREATE TABLE posts (
    id INT,
    title VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

YEAR

ประเภท YEAR จะเก็บเฉพาะปี ช่วงที่รองรับคือจาก “1901” ถึง “2155” เหมาะเมื่อคุณต้องการระบุปีเฉพาะ เช่น ปีการผลิตหรือปีก่อตั้ง

CREATE TABLE products (
    id INT,
    name VARCHAR(50),
    manufactured_year YEAR
);

การเปรียบเทียบและกรณีการใช้งานของแต่ละประเภทวันที่/เวลา

Data TypeStored ValueRangeTypical Use Cases
DATEYear, month, day1000-01-01 ~ 9999-12-31Birthdays, anniversaries, etc.
TIMEHour, minute, second-838:59:59 ~ 838:59:59Working time, task duration
DATETIMEYear, month, day, hour, minute, second1000-01-01 00:00:00 ~ 9999-12-31 23:59:59Schedules, event timestamps
TIMESTAMPYear, month, day, hour, minute, second1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTCCreated/updated times, automatic tracking
YEARYear1901 ~ 2155Manufacturing year, founding year

สรุป

MySQL date/time data types should be chosen based on the characteristics of your data and how you plan to use it. ในส่วนถัดไป เราจะพิจารณาความแตกต่างระหว่าง DATETIME และ TIMESTAMP อย่างละเอียด ซึ่งเป็นสิ่งที่สับสนได้ง่ายเป็นพิเศษ。

3. ความแตกต่างระหว่าง DATETIME และ TIMESTAMP

เมื่อทำงานกับวันที่และเวลาใน MySQL DATETIME และ TIMESTAMP เป็นประเภทที่ใช้กันบ่อย แต่มีความแตกต่างที่สำคัญระหว่างทั้งสอง ทั้งคู่เก็บปี เดือน วัน ชั่วโมง นาที และวินาที แต่แตกต่างกันในวิธีการจัดการโซนเวลาและช่วงเวลาที่สามารถเก็บได้ คุณควรเลือกตามกรณีใช้งานของคุณ ในส่วนนี้ เราจะอธิบายความแตกต่างและลักษณะของ DATETIME และ TIMESTAMP อย่างละเอียด。

ลักษณะของ DATETIME

  • ไม่ขึ้นอยู่กับโซนเวลา : ประเภท DATETIME ไม่ได้รับผลกระทบจากการตั้งค่าโซนเวลาของเซิร์ฟเวอร์ คุณสามารถดึงค่าที่เก็บไว้ได้ตรงตามที่บันทึกไว้
  • ช่วง : รองรับตั้งแต่ 1000-01-01 00:00:00 ถึง 9999-12-31 23:59:59
  • กรณีใช้งาน : เหมาะสำหรับข้อมูลที่คุณต้องการเก็บโดยไม่พึ่งพาโซนเวลาใด ๆ เช่น เหตุการณ์ทางประวัติศาสตร์หรือตารางเวลในอนาคต

ตัวอย่าง: การเก็บวันที่/เวลาของเหตุการณ์

ตัวอย่างเช่น หากคุณต้องการเก็บค่าที่อยู่/เวลาแบบ “สากล” ไว้ตามเดิม DATETIME เป็นตัวเลือกที่ดี ตัวอย่างต่อไปนี้บันทึกเหตุการณ์ที่กำหนดไว้ในวันที่และเวลาที่เฉพาะเจาะจง。

CREATE TABLE events (
    id INT,
    event_name VARCHAR(50),
    event_datetime DATETIME
);

ในตารองนี้ วันที่/เวลาที่เก็บใน event_datetime ไม่ได้รับผลกระทบจากโซนเวลา และค่าจะถูกดึงออกมาตรงตามที่เก็บไว้。

ลักษณะของ TIMESTAMP

  • ขึ้นอยู่กับโซนเวลา : ประเภท TIMESTAMP ถูกเก็บและดึงออกมาตามโซนเวลาของเซิร์ฟเวอร์ เมื่อย้ายข้อมูลระหว่างเซิร์ฟเวอร์ในโซนเวลาที่แตกต่างกัน จะมีการแปลงตามนั้น
  • ช่วง : รองรับตั้งแต่ 1970-01-01 00:00:01 UTC ถึง 2038-01-19 03:14:07 UTC (อิงตามช่วง Unix time)
  • รองรับการอัปเดตอัตโนมัติ : โดยใช้ DEFAULT CURRENT_TIMESTAMP และ ON UPDATE CURRENT_TIMESTAMP MySQL สามารถบันทึก timestamp ปัจจุบันโดยอัตโนมัติเมื่อแทรกหรืออัปเดตข้อมูล
  • กรณีใช้งาน : เหมาะที่สุดสำหรับการติดตามเวลาการสร้างหรืออัปเดตโดยอัตโนมัติ เช่น เมื่อคุณต้องการให้ timestamp เปลี่ยนแปลงทุกครั้งที่บันทึกถูกอัปเดต

ตัวอย่าง: การเก็บเวลาการสร้างและอัปเดตสำหรับโพสต์

ตัวอย่างนี้ใช้คุณสมบัติการอัปเดตอัตโนมัติของ TIMESTAMP เพื่อบันทึกเวลาการสร้างและอัปเดตสำหรับโพสต์บล็อก。

CREATE TABLE blog_posts (
    id INT,
    title VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

ด้วยการตั้งค่านี้ created_at จะถูกบันทึกเมื่อโพสต์ถูกสร้างครั้งแรก และ updated_at จะถูกอัปเดตโดยอัตโนมัติทุกครั้งที่โพสต์ถูกแก้ไข。

ตารางเปรียบเทียบ: DATETIME vs TIMESTAMP

FeatureDATETIMETIMESTAMP
Time zoneNot dependent on server time zoneDependent on server time zone
Range1000-01-01 00:00:00 ~ 9999-12-31 23:59:591970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC
Auto-updateNoneSupported via DEFAULT CURRENT_TIMESTAMP, etc.
Typical use casesStore fixed date/time valuesAuto-track created/updated times

วิธีการเลือก

  • เลือก DATETIME หากคุณไม่ต้องการผลกระทบจากโซนเวลา : ตัวอย่างเช่น หากคุณต้องการเก็บเวลาของเหตุการณ์เป็นเวลาท้องถิ่นคงที่สำหรับประเทศ/ภูมิภาคเฉพาะ DATETIME จะเหมาะสม
  • เลือก TIMESTAMP หากคุณต้องการการอัปเดตอัตโนมัติหรือการจัดการโซนเวลา : ตัวอย่างเช่น หากคุณต้องการบันทึกโดยอัตโนมัติว่าบรรทัดฐานข้อมูลถูกอัปเดตเมื่อใด TIMESTAMP จะสะดวก

สรุป

DATETIME และ TIMESTAMP มีลักษณะที่แตกต่างกัน โดยการเลือกอันที่เหมาะสมกับวัตถุประสงค์ของคุณ คุณสามารถจัดการข้อมูลวันที่/เวลาได้อย่างมีประสิทธิภาพมากขึ้น ในส่วนถัดไป เราจะพิจารณาฟังก์ชันวันที่ที่จำเป็นใน MySQL。

4. พื้นฐานฟังก์ชันวันที่/เวลาใน MySQL

MySQL มีฟังก์ชันมากมายสำหรับทำงานกับวันที่และเวลา—ตั้งแต่การดึงวันที่/เวลาปัจจุบันไปจนถึงการบวกหรือลบช่วงเวลา ฟังก์ชันเหล่านี้มีประโยชน์สำหรับการบริหารฐานข้อมูลและการวิเคราะห์ ในส่วนนี้ เราจะอธิบายพื้นฐานของฟังก์ชันวันที่/เวลาใน MySQL และกรณีใช้งานทั่วไปของ它们。

ฟังก์ชันสำหรับดึงวันที่/เวลาปัจจุบัน

ฟังก์ชันสามอย่างที่ใช้ดึงวันที่และเวลาปัจจุบันใน MySQL คือ NOW(), CURDATE(), และ CURTIME().

NOW()

NOW() คืนค่าวันที่และเวลาปัจจุบันในรูปแบบ YYYY-MM-DD HH:MM:SS. มีประโยชน์สำหรับการบันทึกและทำเครื่องหมายเวลาในบันทึก.

SELECT NOW(); -- Get the current date and time

CURDATE()

CURDATE() คืนค่าวันที่ปัจจุบันในรูปแบบ YYYY-MM-DD. ไม่รวมเวลา ดังนั้นจึงเหมาะเมื่อคุณต้องการเฉพาะวันที่เท่านั้น.

SELECT CURDATE(); -- Get the current date

CURTIME()

CURTIME() คืนค่าเวลาปัจจุบันในรูปแบบ HH:MM:SS. ใช้เมื่อคุณต้องการเฉพาะเวลาโดยไม่มีวันที่.

SELECT CURTIME(); -- Get the current time

ฟังก์ชันสำหรับเพิ่ม/ลบวันที่

เพื่อเพิ่มหรือหักช่วงเวลาออกจากวันที่ ให้ใช้ DATE_ADD() และ DATE_SUB(). ฟังก์ชันเหล่านี้ทำให้การคำนวณวันที่ในอนาคตหรืออดีตเป็นเรื่องง่าย.

DATE_ADD()

DATE_ADD() เพิ่มช่วงเวลาที่ระบุลงในวันที่. ตัวอย่างเช่น มีประโยชน์สำหรับการหาวันที่ที่อยู่ห่างจากปัจจุบัน 7 วันหรือ 1 เดือน.

SELECT DATE_ADD('2023-01-01', INTERVAL 7 DAY); -- Returns 2023-01-08

DATE_SUB()

DATE_SUB() หักช่วงเวลาที่ระบุออกจากวันที่. ใช้เพื่อคำนวณวันที่ในอดีต.

SELECT DATE_SUB('2023-01-01', INTERVAL 1 MONTH); -- Returns 2022-12-01

ฟังก์ชันสำหรับคำนวณความแตกต่างของวันที่

เพื่อคำนวณความแตกต่างระหว่างสองวันที่, DATEDIFF() มีความสะดวก. ตัวอย่างเช่น คุณสามารถคำนวณจำนวนวันที่ผ่านไปตั้งแต่วันที่เฉพาะ หรือจำนวนวันระหว่างสองวันที่.

DATEDIFF()

DATEDIFF() คืนค่าความแตกต่างระหว่างสองวันที่เป็นจำนวนวัน. มีประโยชน์เมื่อคุณต้องการยืนยันจำนวนวันจากวันที่เริ่มต้นถึงวันที่สิ้นสุด.

SELECT DATEDIFF('2023-01-10', '2023-01-01'); -- Returns 9

ฟังก์ชันวันที่ที่เป็นประโยชน์อื่น ๆ

MySQL มีฟังก์ชันวันที่เพิ่มเติมที่เป็นประโยชน์.

EXTRACT()

EXTRACT() ดึงส่วนเฉพาะ (ปี, เดือน, วัน ฯลฯ) จากวันที่. มีประโยชน์เมื่อคุณต้องการเพียงส่วนหนึ่งของวันที่.

SELECT EXTRACT(YEAR FROM '2023-01-01'); -- Extract year (2023)
SELECT EXTRACT(MONTH FROM '2023-01-01'); -- Extract month (1)
SELECT EXTRACT(DAY FROM '2023-01-01'); -- Extract day (1)

DATE_FORMAT()

DATE_FORMAT() แสดงวันที่ในรูปแบบที่ระบุ. มีประโยชน์เมื่อคุณต้องการแสดงวันที่ในรูปแบบเฉพาะ (เช่น รูปแบบสไตล์ญี่ปุ่น).

SELECT DATE_FORMAT('2023-01-01', '%Y-%m-%d'); -- Returns 2023-01-01

5. วิธีการจัดรูปแบบและแปลงวันที่

ใน MySQL คุณสามารถเปลี่ยนวิธีการแสดงวันที่ให้เป็นรูปแบบที่อ่านง่ายขึ้น หรือแปลงสตริงวันที่เป็นประเภทวันที่ได้. สิ่งนี้ทำให้คุณควบคุมรูปแบบการแสดงผลได้อย่างยืดหยุ่นและจัดการข้อมูลอย่างสม่ำเสมอแม้เมื่อข้อมูลเข้ามาในรูปแบบต่าง ๆ. ในส่วนนี้ เราจะอธิบายฟังก์ชันหลักที่ใช้สำหรับการจัดรูปแบบและการแปลงวันที่.

การจัดรูปแบบวันที่ด้วยฟังก์ชัน DATE_FORMAT() Function

โดยใช้ DATE_FORMAT() คุณสามารถแสดงค่าของวันที่ในรูปแบบที่ระบุได้. สิ่งนี้มีประโยชน์เป็นพิเศษเมื่อคุณต้องการรูปแบบการแสดงผลที่แตกต่างจากมาตรฐาน เช่น รูปแบบญี่ปุ่น “YYYY年MM月DD日”.

Format Options

ด้วย DATE_FORMAT() คุณสามารถใช้ตัวเลือกรูปแบบดังต่อไปนี้:

  • %Y : ปี 4 หลัก
  • %y : ปี 2 หลัก
  • %m : เดือน 2 หลัก (01–12)
  • %d : วัน 2 หลัก (01–31)
  • %H : ชั่วโมง 2 หลัก (00–23)
  • %i : นาที 2 หลัก (00–59)
  • %s : วินาที 2 หลัก (00–59)

Example Usage

ตัวอย่างเช่น เพื่อแสดงวันที่ 2023-01-01 เป็น “2023年01月01日” คุณสามารถเขียนดังนี้:

SELECT DATE_FORMAT('2023-01-01', '%Y年%m月%d日'); -- Returns 2023年01月01日

คุณยังสามารถแสดงวันที่และเวลาโดยใช้สแลช เช่น “2023/01/01 12:30:45.”

SELECT DATE_FORMAT('2023-01-01 12:30:45', '%Y/%m/%d %H:%i:%s'); -- Returns 2023/01/01 12:30:45

การแปลงสตริงเป็นวันที่ด้วย STR_TO_DATE()

STR_TO_DATE() ฟังก์ชันแปลงสตริงวันที่เป็นประเภทวันที่ของ MySQL ตัวอย่างเช่น มีประโยชน์เมื่อคุณต้องการถือสตริงเช่น “2023年01月01日” เป็นค่า DATE value.

ตัวอย่างการใช้งาน

เพื่อแปลงสตริง “2023-01-01” เป็นค่า DATE ให้เขียนดังต่อไปนี้:

SELECT STR_TO_DATE('2023-01-01', '%Y-%m-%d'); -- Returns 2023-01-01 as a DATE

เพื่อแปลงสตริงสไตล์ญี่ปุ่นเช่น “2023年01月01日” เป็นวันที่ ให้ระบุรูปแบบที่สอดคล้อง:

SELECT STR_TO_DATE('2023年01月01日', '%Y年%m月%d日'); -- Returns 2023-01-01 as a DATE

ตัวอย่างการแปลงวันที่จากรูปแบบต่าง ๆ

ในการใช้งานจริง รูปแบบการป้อนวันที่อาจแตกต่างกัน ดังนั้นคุณอาจต้องแปลงจากรูปแบบต่าง ๆ ด้านล่างเป็นตัวอย่างบางส่วน.

  1. แปลง “YYYY/MM/DD” เป็นค่า DATE
    SELECT STR_TO_DATE('2023/01/01', '%Y/%m/%d'); -- Returns 2023-01-01 as a DATE
    
  1. แปลง “MM-DD-YYYY” เป็นค่า DATE
    SELECT STR_TO_DATE('01-01-2023', '%m-%d-%Y'); -- Returns 2023-01-01 as a DATE
    

ด้วยวิธีนี้ แม้ว่าข้อมูลจะถูกป้อนในรูปแบบต่าง ๆ คุณก็สามารถจัดเก็บและจัดการได้อย่างสม่ำเสมอในรูปแบบวันที่เดียวกัน.

ความแตกต่างระหว่าง DATE_FORMAT และ STR_TO_DATE, และเมื่อควรใช้แต่ละฟังก์ชัน

  • DATE_FORMAT() : ใช้เพื่อเปลี่ยนรูปแบบการแสดงผลของค่าที่เป็นวันที่ที่มีอยู่ เนื่องจากการเปลี่ยนแปลงมีผลต่อการแสดงผลเท่านั้น ข้อมูลที่จัดเก็บจึงไม่ได้ถูกแก้ไข
  • STR_TO_DATE() : ใช้เพื่อแปลงสตริงวันที่เป็นค่า DATE หรือ DATETIME ของ MySQL การเปลี่ยนแปลงนี้ทำให้ประเภทข้อมูลที่จัดเก็บเปลี่ยนและทำให้การประมวลผลวันที่ด้วยฟังก์ชันและคิวรีอื่น ๆ ของ MySQL ง่ายขึ้น

สรุป

โดยการใช้ DATE_FORMAT() และ STR_TO_DATE() คุณสามารถจัดการการแสดงผลและการจัดเก็บข้อมูลวันที่ได้อย่างยืดหยุ่น ทำให้สามารถจัดการกับข้อมูลที่ผู้ใช้หรือระบบป้อนเข้ามาได้อย่างยืดหยุ่นมากขึ้นในขณะที่รักษาการจัดการวันที่ให้สม่ำเสมอ ในส่วนต่อไป เราจะอธิบายการคำนวณและการเปรียบเทียบวันที่ และเจาะลึกวิธีการคำนวณและเปรียบเทียบช่วงเวลาโดยใช้ข้อมูลวันที่.

6. การคำนวณและการเปรียบเทียบวันที่

MySQL มีฟังก์ชันที่สะดวกหลายตัวสำหรับการคำนวณและการเปรียบเทียบวันที่ ซึ่งทำให้สามารถดึงข้อมูลสำหรับช่วงเวลาที่กำหนดหรือคำนวณความแตกต่างของวันที่เพื่อการวิเคราะห์ ในส่วนนี้ เราจะนำเสนอฟังก์ชันหลักที่ใช้สำหรับการคำนวณและการเปรียบเทียบวันที่ พร้อมวิธีการใช้งาน.

ฟังก์ชันคำนวณความแตกต่างของวันที่: DATEDIFF()

DATEDIFF() ฟังก์ชันคืนค่าความแตกต่างระหว่างสองวันที่เป็น “วัน” มีประโยชน์เมื่อคุณต้องการตรวจสอบจำนวนวันที่ผ่านไประหว่างวันที่หรือกำหนดว่ามีกี่วันที่ผ่านจากเหตุการณ์ในอดีตจนถึงวันนี้.

ตัวอย่างการใช้งาน

ตัวอย่างเช่น เพื่อคำนวณจำนวนวันตั้งแต่ 1 มกราคม 2023 ถึง 10 มกราคม 2023 ให้เขียนดังต่อไปนี้:

SELECT DATEDIFF('2023-01-10', '2023-01-01'); -- Returns 9

ในตัวอย่างนี้ ความแตกต่างจากวันที่เริ่มต้นถึงวันที่สิ้นสุดคือ 9 วัน ดังนั้นผลลัพธ์คือ 9.

การคำนวณความแตกต่างตามหน่วยด้วย TIMESTAMPDIFF()

TIMESTAMPDIFF() ฟังก์ชันคำนวณความแตกต่างระหว่างสองวันที่หรือ datetime ในหน่วยที่ระบุ (ปี, เดือน, วัน, ชั่วโมง, นาที, วินาที) ตัวอย่างเช่น คุณสามารถคำนวณความแตกต่างเป็น “เดือน” หรือ “ชั่วโมง” ตามต้องการ.

ตัวอย่างการใช้งาน

  1. คำนวณความแตกต่างเป็นเดือน
    SELECT TIMESTAMPDIFF(MONTH, '2022-01-01', '2023-01-01'); -- Returns 12
    
  1. คำนวณความแตกต่างเป็นชั่วโมง
    SELECT TIMESTAMPDIFF(HOUR, '2023-01-01 00:00:00', '2023-01-02 12:00:00'); -- Returns 36
    

การเปรียบเทียบวันที่

การเปรียบเทียบวันที่ทำโดยใช้ตัวดำเนินการเปรียบเทียบมาตรฐานของ MySQL (<, >, <=, >=, =) ซึ่งทำให้คุณสามารถดึงข้อมูลภายในช่วงเวลาที่กำหนดหรือรวมวันที่ในอดีต/อนาคตเป็นเงื่อนไขได้.

ตัวอย่างการใช้งาน

ตัวอย่างเช่น เพื่อดึงข้อมูล “ตั้งแต่หรือหลัง 1 มกราคม 2023” ให้เขียนดังต่อไปนี้:

SELECT * FROM events WHERE event_date >= '2023-01-01';

การระบุช่วงด้วย BETWEEN

ตัวดำเนินการ BETWEEN ช่วยให้คุณสามารถระบุช่วงวันที่เพื่อดึงข้อมูลได้ มันมีประโยชน์เมื่อคุณต้องการดึงบันทึกที่อยู่ในช่วงเวลาที่เฉพาะเจาะจง

ตัวอย่างการใช้งาน

ตัวอย่างเช่น เพื่อดึงข้อมูลจาก 1 มกราคม 2023 ถึง 31 มกราคม 2023 ให้เขียนดังนี้:

SELECT * FROM events WHERE event_date BETWEEN '2023-01-01' AND '2023-01-31';

การคำนวณวันที่ด้วย ADDDATE() และ SUBDATE()

คุณสามารถใช้ ADDDATE() และ SUBDATE() เพื่อบวกหรือลบจำนวนวันจากวันที่ได้ สิ่งเหล่านี้สะดวกสำหรับการคำนวณวันที่ในอนาคตหรืออดีต

ตัวอย่างการใช้งาน

  1. เพิ่ม 10 วันให้กับวันที่
    SELECT ADDDATE('2023-01-01', 10); -- Returns 2023-01-11
    
  1. ลบ 10 วันจากวันที่
    SELECT SUBDATE('2023-01-01', 10); -- Returns 2022-12-22
    

สรุป

โดยการใช้คุณสมบัติการคำนวณและเปรียบเทียบวันที่ของ MySQL คุณสามารถดึงข้อมูลสำหรับช่วงเวลาที่เฉพาะเจาะจงได้อย่างมีประสิทธิภาพและวิเคราะห์ข้อมูลตามช่วงเวลา ในส่วนถัดไป เราจะพิจารณาเรื่อง “การค้นหาช่วงวันที่” ที่ซับซ้อนมากขึ้นอย่างละเอียดยิ่งขึ้น