Memahami Perbedaan yy dan rr pada Masker Tanggal di Oracle SQL

Ketika bekerja dengan format tanggal di Oracle SQL, muncul pertanyaan umum: Apa perbedaan antara masker tanggal yy dan rr di Oracle? Memahami perbedaan ini dapat berdampak signifikan pada hasil yang dikembalikan oleh kueri Anda, terutama saat berurusan dengan format tahun dua digit. Mari kita uraikan masker tanggal ini dan jelaskan mengapa mereka menghasilkan hasil yang berbeda.

Penjelasan Masalah

Dalam Oracle SQL, ketika melakukan manipulasi atau perbandingan tanggal, Anda mungkin menemui situasi di mana Anda perlu mengonversi string menjadi format tanggal. Masker tanggal yy dan rr sering digunakan untuk tujuan ini.

Berikut adalah dua contoh yang menunjukkan perbedaan mereka:

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');

Saat dieksekusi, kedua kueri ini mungkin mengembalikan hasil yang berbeda berdasarkan interpretasi tahun “81.”

Memecah Masker Tanggal

Masker Tanggal yy

  • Definisi: Masker yy memungkinkan Anda untuk memasukkan tahun dua digit.
  • Interpretasi: Oracle secara otomatis mengasumsikan dua digit tersebut berhubungan dengan abad saat ini.
    • Misalnya, jika tahun saat ini adalah 2023, tanggal seperti 01/05/81 akan diinterpretasikan sebagai tahun 2081.
  • Kasus Penggunaan: Ini dapat menyebabkan hasil yang tidak terduga, terutama untuk tanggal yang merujuk pada abad ke-20.

Masker Tanggal rr

  • Definisi: Masker rr juga menerima tahun dua digit tetapi menggunakan metode yang berbeda untuk menginterpretasikannya.
  • Interpretasi: Tahun dua digit dibulatkan untuk menentukan tahun penuh:
    • 50-99: Dianggap sebagai tahun 1950-1999.
    • 00-49: Dianggap sebagai tahun 2000-2049.
  • Contoh: Jadi, 01/05/81 akan diinterpretasikan sebagai 1981, yang kemungkinan merupakan referensi yang dimaksudkan dalam banyak kasus.

Rekap Contoh

Berikut adalah rekap bagaimana masker ini memengaruhi keluaran:

  • Kueri menggunakan yy:
    • Mengasumsikan 01/05/81 adalah 2081 yang kemungkinan besar tidak memiliki catatan rekrutmen.
  • Kueri menggunakan rr:
    • Melihat tanggal yang sama sebagai 1981, yang mungkin memiliki catatan rekrutmen dalam tabel emp.

Kesimpulan

Memahami perbedaan antara yy dan rr adalah penting saat menulis kueri Oracle SQL yang melibatkan tanggal. Sementara yy dapat menyebabkan salah tafsir terhadap tahun-tahun mendatang, masker rr memberikan pendekatan yang lebih masuk akal untuk mengonversi tahun dua digit dengan aturan pembulatannya.

Memilih masker yang tepat dapat menyelamatkan Anda dari secara tidak sengaja mengecualikan data dan memastikan bahwa kueri SQL Anda menghasilkan hasil yang dimaksudkan. Untuk sebagian besar kasus terkait data historis, masker rr direkomendasikan untuk kejelasan dan akurasi.

Selalu pastikan untuk mempertimbangkan konteks data Anda dan tahun berjalan saat bekerja dengan tahun dua digit untuk menghindari kesalahan dan salah tafsir.