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

ดึงเฉพาะวันที่จาก TIMESTAMP ใน MySQL ด้วย DATE()

เมื่อคอลัมน์เป็น TIMESTAMP หรือ DATETIME และต้องการเฉพาะส่วนวันที่ ให้ใช้ฟังก์ชัน DATE()

รูปแบบคำสั่ง

SELECT DATE(yourTimestampColumn) AS date_only FROM yourTableName;

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

1. สร้างตาราง TIMESTAMP Column

mysql> CREATE TABLE DateFromTimestamp (
    -> ShippingDateTime TIMESTAMP
    -> );
Query OK, 0 rows affected (0.60 sec)

2. เพิ่มข้อมูล Timestamp

mysql> INSERT INTO DateFromTimestamp VALUES ('2012-12-26 13:24:35');
mysql> INSERT INTO DateFromTimestamp VALUES ('2013-11-26 14:36:40');
mysql> INSERT INTO DateFromTimestamp VALUES ('2016-07-22 15:20:10');
mysql> INSERT INTO DateFromTimestamp VALUES ('2017-11-04 04:25:30');

3. ดูข้อมูลดิบ (มีเวลา)

mysql> SELECT * FROM DateFromTimestamp;
+---------------------+
| ShippingDateTime    |
+---------------------+
| 2012-12-26 13:24:35 |
| 2013-11-26 14:36:40 |
| 2016-07-22 15:20:10 |
| 2017-11-04 04:25:30 |
+---------------------+
4 rows in set (0.00 sec)

4. ดึงเฉพาะวันที่

mysql> SELECT DATE(ShippingDateTime) AS OnlyDatePartFromTimestamp 
    -> FROM DateFromTimestamp;
+---------------------------+
| OnlyDatePartFromTimestamp |
+---------------------------+
| 2012-12-26                |
| 2013-11-26                |
| 2016-07-22                |
| 2017-11-04                |
+---------------------------+
4 rows in set (0.00 sec)

ฟังก์ชันแยกส่วนวันที่/เวลา

ฟังก์ชันคืนค่าตัวอย่าง
DATE(datetime)วันที่ (YYYY-MM-DD)2018-11-26
TIME(datetime)เวลา (HH:MM:SS)14:30:59
YEAR(date)ปี2018
MONTH(date)เดือน (1-12)11
DAY(date)วันที่ (1-31)26
HOUR(time)ชั่วโมง (0-23)14
MINUTE(time)นาที (0-59)30
SECOND(time)วินาที (0-59)59

ใช้ใน WHERE Clause (ระวัง Index)

-- ❌ ไม่ใช้ Index (Function on Column)
SELECT * FROM orders WHERE DATE(created_at) = '2024-01-15';

-- ✅ ใช้ Index ได้ (Range Query)
SELECT * FROM orders 
WHERE created_at >= '2024-01-15' 
  AND created_at < '2024-01-16';

CAST Alternative

SELECT CAST(ShippingDateTime AS DATE) FROM DateFromTimestamp;
-- ผลลัพธ์เหมือน DATE()

TIMESTAMP vs DATETIME

  • TIMESTAMP: เก็บเป็น UTC, แปลงตาม Timezone ของ Session, ช่วง 1970-2038, 4 bytes
  • DATETIME: เก็บตามที่ใส่, ไม่แปลง Timezone, ช่วง 1000-9999, 8 bytes (5.6+: 5 bytes)
  • ทั้งคู่ใช้ DATE() ได้เหมือนกัน