เมื่อเก็บวันที่เป็น Unix Timestamp (จำนวนวินาทีจาก 1970-01-01 UTC) ในคอลัมน์ BIGINT/INT สามารถแปลงเป็นวันที่/เวลา แล้วดึงส่วนเดือนได้ด้วยฟังก์ชัน FROM_UNIXTIME() และ MONTH()
ตัวอย่างการใช้งาน
สร้างตารางเก็บ Timestamp:
mysql> CREATE TABLE DemoTable1457 (Value BIGINT);
เพิ่มข้อมูล Timestamp:
mysql> INSERT INTO DemoTable1457 VALUES (1570207117), (1548947534), (1575213134);
ดูข้อมูล:
mysql> SELECT * FROM DemoTable1457; +------------+ | Value | +------------+ | 1570207117 | | 1548947534 | | 1575213134 | +------------+
แปลง Timestamp เป็นเดือน:
mysql> SELECT MONTH(FROM_UNIXTIME(Value)) FROM DemoTable1457;
ผลลัพธ์ (เดือน 10, 1, 12):
+-----------------------------+ | MONTH(FROM_UNIXTIME(Value)) | +-----------------------------+ | 10 | | 1 | | 12 | +-----------------------------+
ฟังก์ชันที่เกี่ยวข้อง
| ฟังก์ชัน | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| FROM_UNIXTIME(unix_ts) | แปลง Unix Timestamp → DATETIME | FROM_UNIXTIME(1570207117) → '2019-10-04 12:38:37' |
| UNIX_TIMESTAMP(date) | แปลง DATETIME → Unix Timestamp | UNIX_TIMESTAMP('2019-10-04 12:38:37') → 1570207117 |
| MONTH(date) | ดึงเดือน (1-12) | MONTH('2019-10-04') → 10 |
| YEAR(date) | ดึงปี | YEAR('2019-10-04') → 2019 |
| DATE_FORMAT(date, fmt) | จัดรูปแบบวันที่ | DATE_FORMAT(FROM_UNIXTIME(ts), '%Y-%m') |
Timezone Considerations
- FROM_UNIXTIME() ใช้ Timezone ของ Session (
@@session.time_zone) - Unix Timestamp เป็น UTC เสมอ → ผลลัพธ์จะเปลี่ยนตาม Timezone
- ตั้ง Timezone:
SET time_zone = '+07:00';(สำหรับไทย) - หรือใช้
CONVERT_TZ(FROM_UNIXTIME(ts), 'UTC', '+07:00')
การประยุกต์ใช้
- รายงานสรุปยอดขาย/กิจกรรมต่อเดือนจาก Log Timestamp
- Group By เดือน:
SELECT MONTH(FROM_UNIXTIME(ts)), COUNT(*) FROM logs GROUP BY 1 - Partition Table ตามเดือนจาก Timestamp
- ETL: แปลง Timestamp จาก External System เป็น DateTime ใน MySQL
Best Practice
- เก็บเป็น DATETIME/TIMESTAMP แทน BIGINT หากเป็นไปได้ (Readable, Indexable, Timezone-aware)
- TIMESTAMP ใน MySQL แปลง UTC ↔ Session Timezone อัตโนมัติ (Range: 1970-2038)
- DATETIME เก็บค่าคงที่ ไม่แปลง Timezone (Range: 1000-9999)
- BigInt Timestamp ใช้เมื่อต้อง相容กับ External Systems ที่ส่ง Unix Time มา