วันที่บน MySQL
รูปแบบวันที่ของ MySQL จัดเก็บอยู่ในรูปแบบเดียวเท่านั้น คือ YYYY-MM-DD HH:MM:SS สำหรับข้อมูลชนิด DATETIME
ในการเก็บข้อมูลวันที่ลงใน MySQL จำเป็นต้องจัดเก็บให้ตรงรูปแบบเพื่อให้ MySQL สามารถนำข้อมูลไปใช้ในการคำนวณได้ เช่น
การแยกวัน เดือน ปี ออกจากวันที่ สามารถทำได้โดยใช้ฟังกชั่น DAY(), MONTH() และ YEAR() บน MySQL โดยมีรูปแบบดังนี้
ตัวอย่าง
คืนค่าวันที 31
คืนค่าวันเดือนปี ของคนที่เกิดในปี 1987
นอกจากนั้นยังใช้ในการเรียงลำดับได้ด้วยเช่น
หมายถึงเรียงลำดับ ตาม ปี และ เดือน
ในการจัดเก็บข้อมูลชนิดนี้ถ้าจัดเก็บข้อมูลนอกขอบเขต เช่น จัดเก็บเป็น 0000-00-00 อาจได้รับข้อผิดพลาดจาก MySQL ซึ่งในกรณีที่จำเป็นเราสามารถเปิดให้ MySQL ยอมรับค่านี้ได้ โดยการกำหนด sql_mode = "" ใน my.ini (Hosting ส่วนใหญ่จะสนับสนุนความสามารถนี้อยู่แล้ว)
ในกรณีที่ต้องการเก็บวันที่เป็นปี พ.ศ. เราจะไม่สามารถเก็บวันที่ลงใน MySQL ได้โดยตรง ให้เราทำการแปลงปี พ.ศ. ให้เป็นปี ค.ศ. ก่อน ด้วยการลบปี พ.ศ. ด้วย 543 ก่อนแล้วค่อยจัดเก็บ
ในทางกลับกันเมื่อต้องการนำข้อมูล MySQL มาแสดงผลเป็นปี พ.ศ. ก็ต้องเอามาบวกด้วย 543
ในกรณีที่ข้อมูลวันที่ที่จัดเก็บใช้สำหรับการแสดงผลอย่างเดียว ไม่ได้ใช้ในการ Query ใดๆเลย เราสามารถจัดเก็บในรูปแบบ VARCHAR ได้ ซึ่งในกรณีนี้ เราสามารถจัดเก็บในรูปแบบใดๆที่เราต้องการได้เลย เช่นเป็นปี พ.ศ. หรือเป็นวันที่แบบไทยก็ได้ แล้วแต่เราต้องการ
มีอีกวิธีในการจัดเก็บว้นที่ คือเก็บในรูปแบบตัวเลข TIMESTAMP ซึ่งสามารถเก็บได้ระหว่าง ค.ศ. 1970 ถึง 2038 (บางระบบปฏิบัตการณ์อาจอยู่ในช่วง 1901 ถึง 2038) ซึงเราสามารถใช้ฟังก์ชั่น mktime() ในการแปลงวันที่ให้เป็นรูปแบบ TIMESTAMP ได้ (ข้อจำกัดในการจัดเก็บอยู่ที่ความสามารถของของฟังก์ชั่น mktime() ในการแปลงวันที่)
และในการแปลงข้อมูลกลับเป็นวันที่สามารถใช้ฟังก์ชั่น date() แปลงกลับได้
- YYYY อยู่ระหว่าง ปี ค.ศ. 1970 ถึง 2069 เท่านั้น ต้องเป็นปี ค.ศ. เท่านั้น
- MM อยู่ระหว่าง 1 ถึง 12
- DD อยู่ระหว่าง 1 ถึง 31 (สูงสุดแล้วแต่เดือน เช่น กันยายน จะสูงสุดได้แค่ 30 เป็นต้น)
- HH อยู่ระหว่าง 0 ถึง 23
- MM และ SS อยู่ระหว่าง 0 ถึง 59
ในการเก็บข้อมูลวันที่ลงใน MySQL จำเป็นต้องจัดเก็บให้ตรงรูปแบบเพื่อให้ MySQL สามารถนำข้อมูลไปใช้ในการคำนวณได้ เช่น
การแยกวัน เดือน ปี ออกจากวันที่ สามารถทำได้โดยใช้ฟังกชั่น DAY(), MONTH() และ YEAR() บน MySQL โดยมีรูปแบบดังนี้
DAY(date)
MONTH(date)
YEAR(date)
ตัวอย่าง
SELECT DAY('1960/12/31') as `daynum`;
คืนค่าวันที 31
SELECT `birthdate` WHERE YEAR(`birthdate`) = 1987
คืนค่าวันเดือนปี ของคนที่เกิดในปี 1987
นอกจากนั้นยังใช้ในการเรียงลำดับได้ด้วยเช่น
ORDER BY YEAR(`birthday`),MONTH(`birthdate`)
หมายถึงเรียงลำดับ ตาม ปี และ เดือน
ในการจัดเก็บข้อมูลชนิดนี้ถ้าจัดเก็บข้อมูลนอกขอบเขต เช่น จัดเก็บเป็น 0000-00-00 อาจได้รับข้อผิดพลาดจาก MySQL ซึ่งในกรณีที่จำเป็นเราสามารถเปิดให้ MySQL ยอมรับค่านี้ได้ โดยการกำหนด sql_mode = "" ใน my.ini (Hosting ส่วนใหญ่จะสนับสนุนความสามารถนี้อยู่แล้ว)
ในกรณีที่ต้องการเก็บวันที่เป็นปี พ.ศ. เราจะไม่สามารถเก็บวันที่ลงใน MySQL ได้โดยตรง ให้เราทำการแปลงปี พ.ศ. ให้เป็นปี ค.ศ. ก่อน ด้วยการลบปี พ.ศ. ด้วย 543 ก่อนแล้วค่อยจัดเก็บ
// วันที่ ปี พ.ศ.
$date = '2557-12-31 12:30:01';
if (preg_match('/([0-9]{1,4})(\-[0-9]{1,2}\-[0-9]{1,2}(\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})?)/', $date, $match)) {
echo ($match[1] - 543).$match[2];
}
ในทางกลับกันเมื่อต้องการนำข้อมูล MySQL มาแสดงผลเป็นปี พ.ศ. ก็ต้องเอามาบวกด้วย 543
ในกรณีที่ข้อมูลวันที่ที่จัดเก็บใช้สำหรับการแสดงผลอย่างเดียว ไม่ได้ใช้ในการ Query ใดๆเลย เราสามารถจัดเก็บในรูปแบบ VARCHAR ได้ ซึ่งในกรณีนี้ เราสามารถจัดเก็บในรูปแบบใดๆที่เราต้องการได้เลย เช่นเป็นปี พ.ศ. หรือเป็นวันที่แบบไทยก็ได้ แล้วแต่เราต้องการ
มีอีกวิธีในการจัดเก็บว้นที่ คือเก็บในรูปแบบตัวเลข TIMESTAMP ซึ่งสามารถเก็บได้ระหว่าง ค.ศ. 1970 ถึง 2038 (บางระบบปฏิบัตการณ์อาจอยู่ในช่วง 1901 ถึง 2038) ซึงเราสามารถใช้ฟังก์ชั่น mktime() ในการแปลงวันที่ให้เป็นรูปแบบ TIMESTAMP ได้ (ข้อจำกัดในการจัดเก็บอยู่ที่ความสามารถของของฟังก์ชั่น mktime() ในการแปลงวันที่)
// วันที่ ปี พ.ศ.
$date = '2557-12-31 12:30:01';
if (preg_match('/([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2})(\s([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}))?/', $date, $match)) {
// 1420003801
$mktime = mktime(isset($match[5]) ? (int)$match[5] : 0, isset($match[6]) ? (int)$match[6] : 0, isset($match[7]) ? (int)$match[7] : 0, (int)$match[2], (int)$match[3], (int)$match[1] - 543);
}
และในการแปลงข้อมูลกลับเป็นวันที่สามารถใช้ฟังก์ชั่น date() แปลงกลับได้
// 31 Dec 2014 12:30:01
echo date('d M Y H:i:s');