การเข้าใจรหัสวันที่ yy กับ rr ใน Oracle SQL

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

ปัญหาที่อธิบาย

ใน Oracle SQL เมื่อทำการจัดการหรือเปรียบเทียบวันที่ อาจมีกรณีที่คุณต้องแปลงสตริงให้เป็นรูปแบบวันที่ รหัสวันที่ yy และ rr มักใช้สำหรับวัตถุประสงค์นี้

นี่คือตัวอย่างสองตัวอย่างที่แสดงให้เห็นถึงความแตกต่างของพวกมัน:

SELECT ename FROM emp WHERE hiredate = TO_DATE('01/05/81', 'dd/mm/yy');
SELECT ename FROM emp WHERE hiredate = TO_DATE('01/05/81', 'dd/mm/rr');

เมื่อดำเนินการแล้ว คำสั่ง SQL ทั้งสองนี้อาจส่งคืนผลลัพธ์ที่แตกต่างกันขึ้นอยู่กับการตีความปี “81”

การแบ่งรหัสวันที่ออก

รหัสวันที่ yy

  • การนิยาม: รหัส yy อนุญาตให้คุณป้อนปีสองหลัก
  • การตีความ: Oracle จะสันนิษฐานโดยอัตโนมัติว่าหมายเลขสองหลักนั้นเกี่ยวข้องกับศตวรรษปัจจุบัน
    • ตัวอย่างเช่น หากปีปัจจุบันคือ 2023 วันที่เช่น 01/05/81 จะถูกตีความว่าเป็นปี 2081
  • กรณีการใช้งาน: นี่อาจทำให้เกิดผลลัพธ์ที่ไม่คาดคิดโดยเฉพาะสำหรับวันที่ที่อ้างถึงศตวรรษที่ 20

รหัสวันที่ rr

  • การนิยาม: รหัส rr ยังรับปีสองหลักแต่ใช้วิธีการที่แตกต่างในการตีความ
  • การตีความ: ปีสองหลักจะถูกปัดเศษเพื่อกำหนดปีเต็ม:
    • 50-99: ถือว่าเป็นปี 1950-1999
    • 00-49: ถือว่าเป็นปี 2000-2049
  • ตัวอย่าง: ดังนั้น 01/05/81 จะถูกตีความว่าเป็นปี 1981 ซึ่งมักจะเป็นการอ้างอิงที่ตั้งใจในกรณีส่วนใหญ่

สรุปตัวอย่าง

นี่คือการสรุปว่าเหล่ารหัสเหล่านี้ส่งผลกระทบต่อผลลัพธ์อย่างไร:

  • คำสั่งที่ใช้ yy:
    • สันนิษฐานว่า 01/05/81 เป็น 2081 ซึ่งน่าจะไม่มีการจ้างงานที่สอดคล้องกัน
  • คำสั่งที่ใช้ rr:
    • มองเห็นวันที่เดียวกันว่าเป็น 1981 ซึ่งคาดว่าจะมีบันทึกการจ้างงานในตาราง emp

บทสรุป

การเข้าใจ ความแตกต่างระหว่าง yy และ rr เป็นสิ่งสำคัญเมื่อเขียนคำสั่ง SQL ของ Oracle ที่เกี่ยวข้องกับวันที่ ขณะที่ yy อาจนำไปสู่การตีความปีในอนาคตได้ไม่ถูกต้อง รหัส rr จัดให้มีวิธีที่เหมาะสมกว่าในการแปลงปีสองหลักด้วยกฎการปัดเศษของมัน

การเลือกใช้รหัสที่เหมาะสมสามารถช่วยให้คุณหลีกเลี่ยงการรวมข้อมูลโดยไม่ตั้งใจและรับรองว่าคำสั่ง SQL ของคุณให้ผลลัพธ์ตามที่ตั้งใจ สำหรับกรณีส่วนใหญ่ที่เกี่ยวข้องกับข้อมูลในอดีต รหัส rr แนะนำให้ใช้เพื่อความชัดเจนและความถูกต้อง

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