วิธีทำงานอย่างมีประสิทธิภาพด้วยวันที่และเวลาใน MySQL

วิธีทำงานอย่างมีประสิทธิภาพด้วยวันที่และเวลาใน MySQL

วันที่และเวลามีความสำคัญ ช่วยจัดระเบียบสิ่งต่างๆ และเป็นส่วนสำคัญของการทำงานของซอฟต์แวร์





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





เรียนรู้ฟังก์ชัน MySQL ต่างๆ ที่พร้อมใช้งานเพื่อจัดการและจัดการวันที่/เวลาภายในฐานข้อมูลของคุณได้อย่างง่ายดาย





การทำงานกับเขตเวลา

เพื่อช่วยให้ทุกอย่างเป็นมาตรฐาน คุณควรทำงานกับวันที่/เวลาในเขตเวลา UTC เท่านั้น ทุกครั้งที่คุณสร้างการเชื่อมต่อกับฐานข้อมูล MySQL คุณควรเปลี่ยนเขตเวลาเป็น UTC ซึ่งสามารถทำได้ด้วยคำสั่ง SQL ต่อไปนี้:

SET TIME_ZONE = '+0:00'

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



วิธีหาเงินด้วยวิดีโอเกม

เมื่อจำเป็นคุณสามารถได้อย่างง่ายดาย แปลงเขตเวลา ของค่า datetime / timestamp ใด ๆ ด้วย Handy CONVERT_TZ() ฟังก์ชัน MySQL คุณต้องรู้ค่าออฟเซ็ตก่อน เช่น PST บนชายฝั่งตะวันตกของอเมริกาเหนือคือ UTC -08:00 ดังนั้นคุณสามารถใช้:

SELECT CONVERT_TZ('2021-02-04 21:47:23', '+0:00', '-8:00');

ส่งผลให้ 2021-02-04 13:47:23 ซึ่งถูกต้องแล้ว สามอาร์กิวเมนต์ส่งผ่านไปยัง CONVERT_TZ() เป็น datetime / timestamp แรกที่คุณเริ่มต้นด้วย (ใช้ now() สำหรับเวลาปัจจุบัน) วินาทีจะเป็น '+0: 00' เนื่องจากวันที่ทั้งหมดถูกบังคับให้เป็น UTC ในฐานข้อมูล และสุดท้ายคือออฟเซ็ตที่เราต้องการแปลงวันที่เป็น





เพิ่ม / ลบวันที่

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

โชคดีที่ MySQL มีคุณสมบัติที่ยอดเยี่ยม DATE_ADD() และ DATE_SUB () ฟังก์ชั่นทำให้งานนี้ง่ายมาก ตัวอย่างเช่น คุณสามารถลบสองสัปดาห์จากวันที่ปัจจุบันด้วยคำสั่ง SQL:





SELECT DATE_SUB(now(), interval 2 week);

หากคุณต้องการเพิ่มเวลาสามวันในการประทับเวลาที่มีอยู่ คุณจะใช้:

SELECT DATE_ADD('2021-02-07 11:52:06', interval 3 day);

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

ตัวอย่างเช่น หากคุณต้องการดึงข้อมูลการเข้าสู่ระบบทั้งหมดที่เกิดขึ้นใน 34 นาทีที่ผ่านมา คุณสามารถใช้คำสั่ง SQL เช่น:

SELECT * FROM logins WHERE login_date >= DATE_SUB(now(), interval 45 minute);

อย่างที่คุณเห็น สิ่งนี้จะดึงบันทึกทั้งหมดจาก เข้าสู่ระบบ ตารางที่มีวันที่เข้าสู่ระบบมากกว่าเวลาปัจจุบันลบ 45 นาทีหรืออีกนัยหนึ่งคือ 45 นาทีที่ผ่านมา

รับความแตกต่างระหว่างวันที่

บางครั้งคุณจำเป็นต้องได้รับระยะเวลาที่ผ่านไประหว่างสองวัน คุณสามารถรับจำนวนวันระหว่างวันที่สองวันที่แตกต่างกันได้อย่างง่ายดายด้วย DATEDIFF ฟังก์ชัน เช่นคำสั่ง SQL ด้านล่าง:

SELECT DATEDIFF(now(), '2020-12-15');

NS DATEDIFF ฟังก์ชันรับสองอาร์กิวเมนต์ ซึ่งทั้งคู่เป็นวันที่ / เวลาประทับและให้จำนวนวันระหว่างกัน ตัวอย่างข้างต้นจะแสดงจำนวนวันที่ผ่านไปตั้งแต่วันที่ 15 ธันวาคม 2020 จนถึงวันนี้

เพื่อให้ได้จำนวนวินาทีระหว่างวันที่สองวัน TO_SECONDS() ฟังก์ชันอาจมีประโยชน์ เช่น

SELECT TO_SECONDS(now()) - TO_SECONDS('2021-02-05 11:56:41');

ซึ่งจะส่งผลให้จำนวนวินาทีระหว่างวันที่สองวันที่ระบุ

แยกส่วนจากวันที่

มีฟังก์ชัน MySQL มากมายที่ช่วยให้คุณแยกส่วนเฉพาะออกจากวันที่ได้อย่างง่ายดาย เช่น หากคุณต้องการเฉพาะเดือน วันของปี หรือชั่วโมง ต่อไปนี้คือตัวอย่างบางส่วนของฟังก์ชันดังกล่าว:

SELECT MONTH('2021-02-11 15:27:52'); SELECT HOUR(now()); SELECT DAYOFYEAR('2021-07-15 12:00:00');

คำสั่ง SQL ข้างต้นจะส่งผลให้ 02 , ชั่วโมงปัจจุบัน และ 196 เนื่องจากวันที่ 15 กันยายน เป็นวันที่ 196 ของปี ต่อไปนี้คือรายการฟังก์ชันการแยกวันที่ทั้งหมดที่มี โดยแต่ละรายการรับอาร์กิวเมนต์เพียงรายการเดียว วันที่ถูกดึงมาจาก:

- SECOND()
- MINUTE()
- HOUR()
- DAY()
- WEEK() - Number 0 - 52 defining the week within the year.
- MONTH()
- QUARTER() - Number 1 - 4 defining the quarter of the year.
- YEAR()
- DAYOFYEAR() - The day of the year (eg. Sept 15th = 196).
- LAST_DAY() - The last day in the given month.
- DATE() - The date in YYYY-MM-DD format without the time.
- TIME() The time in HH:II:SS format without the date.
- TO_DAYS() - The number of days since A.D. 0.
- TO_SECONDS() - The number of seconds since A.D. 0.
- UNIX_TIMESTAMP() - The number of seconds since the epoch (Jan 1st, 1970)

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

SELECT id, MONTH(created_at), YEAR(created_at) FROM users;

สิ่งนี้จะดึงบันทึกทั้งหมดภายใน ผู้ใช้ ตารางและแสดง id#, เดือนและปีที่ผู้ใช้แต่ละรายถูกสร้างขึ้น

การจัดกลุ่มบันทึกตามช่วงเวลาวันที่

การใช้ฟังก์ชันวันที่ที่ยอดเยี่ยมอย่างหนึ่งคือความสามารถในการจัดกลุ่มบันทึกตามช่วงวันที่โดยใช้ จัดกลุ่มโดย ภายในคำสั่ง SQL ของคุณ ตัวอย่างเช่น คุณอาจต้องการดึงยอดรวมของคำสั่งซื้อทั้งหมดในปี 2020 โดยจัดกลุ่มตามเดือน คุณสามารถใช้คำสั่ง SQL เช่น:

SELECT MONTH(created_at), SUM(amount) FROM orders WHERE created_at BETWEEN '2020-01-01 00:00:00' AND '2020-12-31 23:59:59' GROUP BY MONTH(created_at);

การดำเนินการนี้จะดึงข้อมูลคำสั่งซื้อทั้งหมดที่วางในปี 2020 จัดกลุ่มตามเดือนที่สร้างขึ้น และส่งกลับระเบียน 12 รายการที่แสดงยอดรวมที่สั่งซื้อในแต่ละเดือนของปี

โปรดทราบว่าเพื่อประสิทธิภาพของดัชนีที่ดีขึ้น วิธีที่ดีที่สุดคือหลีกเลี่ยงการใช้ฟังก์ชันวันที่ เช่น ปี() ภายในส่วนคำสั่ง WHERE ของคำสั่ง SQL และใช้ตัวแทน ระหว่าง ตัวดำเนินการตามที่แสดงในตัวอย่างข้างต้น

อย่าสับสนกับวันที่อีกต่อไป

การใช้ความรู้ข้างต้นทำให้คุณสามารถทำงาน แปล และดำเนินการตามวันที่และเวลาได้อย่างมีประสิทธิภาพในกรณีการใช้งานที่หลากหลาย

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

หากคุณยังใหม่กับ SQL อย่าลืมตรวจสอบสิ่งเหล่านี้ คำสั่ง SQL ที่จำเป็น เพื่อช่วยปรับปรุงการใช้ SQL ของคุณ

แบ่งปัน แบ่งปัน ทวีต อีเมล วิธีสร้างรายงานและเอกสารระดับมืออาชีพใน Microsoft Word

คู่มือนี้จะตรวจสอบองค์ประกอบของรายงานระดับมืออาชีพและทบทวนโครงสร้าง การจัดรูปแบบ และการสรุปเอกสารของคุณใน Microsoft Word

อ่านต่อไป
หัวข้อที่เกี่ยวข้อง เกี่ยวกับผู้เขียน Matt Dizak(ตีพิมพ์บทความ 18 บทความ) เพิ่มเติมจาก Matt Dizak

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก