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 tahun2081
.
- Misalnya, jika tahun saat ini adalah 2023, tanggal seperti
- 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
.
- 50-99: Dianggap sebagai tahun
- Contoh: Jadi,
01/05/81
akan diinterpretasikan sebagai1981
, 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
adalah2081
yang kemungkinan besar tidak memiliki catatan rekrutmen.
- Mengasumsikan
- Kueri menggunakan
rr
:- Melihat tanggal yang sama sebagai
1981
, yang mungkin memiliki catatan rekrutmen dalam tabelemp
.
- Melihat tanggal yang sama sebagai
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.