ใช้ฟังก์ชัน UNIX_TIMESTAMP() และ STR_TO_DATE() ร่วมกันเพื่อแปลง DateTime String เป็น Unix Timestamp
Basic Conversion
-- String -> DATETIME -> Unix Timestamp
SELECT UNIX_TIMESTAMP(STR_TO_DATE('Oct 19 2018 10:00PM', '%M %d %Y %h:%i%p'));
-- ผลลัพธ์: 1539966600
Format Specifiers ใน STR_TO_DATE
| Specifier | ความหมาย | ตัวอย่าง |
|---|---|---|
| %M | Month Name (January-December) | October |
| %m | Month Number (01-12) | 10 |
| %d | Day (01-31) | 19 |
| %Y | Year (4 digits) | 2018 |
| %y | Year (2 digits) | 18 |
| %H | Hour 24h (00-23) | 22 |
| %h | Hour 12h (01-12) | 10 |
| %i | Minutes (00-59) | 00 |
| %s | Seconds (00-59) | 00 |
| %p | AM/PM | PM |
กลับคืน: Unix Timestamp -> DATETIME
SELECT FROM_UNIXTIME(1539966600);
-- ผลลัพธ์: 2018-10-19 22:00:00
-- กำหนด Format
SELECT FROM_UNIXTIME(1539966600, '%m-%d-%Y %h:%i:%p');
-- ผลลัพธ์: 10-19-2018 10:00:PM
ใช้กับ Column โดยตรง
-- ถ้าคอลัมน์เป็น DATETIME/TIMESTAMP แล้ว
SELECT UNIX_TIMESTAMP(created_at) FROM orders;
-- ถ้าคอลัมน์เป็น VARCHAR (String)
SELECT UNIX_TIMESTAMP(STR_TO_DATE(date_str, '%Y-%m-%d %H:%i:%s')) FROM logs;
MySQL 8.0+: CAST to DATETIME
-- สะดวกกว่า STR_TO_DATE สำหรับ Format มาตรฐาน
SELECT UNIX_TIMESTAMP(CAST('2018-10-19 22:00:00' AS DATETIME));
Timezone Considerations
UNIX_TIMESTAMP()แปลงจาก Session Timezone ไป UTCFROM_UNIXTIME()แปลงจาก UTC ไป Session Timezone- เก็บข้อมูลเป็น UTC ใน DB แปลง Timezone ตอนแสดงผล
ตัวอย่างการใช้งานจริง
-- Log Table: เก็บ Unix Timestamp (BIGINT) แทน DATETIME
CREATE TABLE api_logs (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
endpoint VARCHAR(255),
request_time BIGINT, -- UNIX_TIMESTAMP()
response_time BIGINT,
duration_ms INT
);
-- Insert
INSERT INTO api_logs (endpoint, request_time, response_time, duration_ms)
VALUES ('/api/users', UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP(NOW()) + 1, 150);
-- Query: ความล่าช้าเฉลี่ย 1 ชม. ล่าสุด
SELECT AVG(duration_ms) FROM api_logs
WHERE request_time > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 HOUR));