Oracle SQL’de yy ve rr Tarih Maskelerini Anlamak

Oracle SQL’de tarih formatları ile çalışırken sıkça karşılaşılan bir soru ortaya çıkar: Oracle’ın yy ve rr tarih maskeleri arasındaki fark nedir? Bu farkı anlamak, özellikle iki basamaklı yıl formatlarıyla çalışırken, sorgularınızın döndürdüğü sonuçları dramatik bir şekilde etkileyebilir. Bu tarih maskelerini inceleyelim ve neden farklı sonuçlar ürettiklerini netleştirelim.

Problemin Açıklaması

Oracle SQL’de tarih manipülasyonları veya karşılaştırmaları yaparken, dizeleri tarih formatlarına dönüştürmeniz gereken durumlarla karşılaşabilirsiniz. Bu amaçla genellikle yy ve rr tarih maskeleri kullanılır.

İşte bu maskelerin farklarını gösteren iki örnek:

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

Bu iki sorgu çalıştırıldığında, “81” yılının yorumlanmasına bağlı olarak farklı sonuçlar döndürebilir.

Tarih Maskelerini İnceleme

yy Tarih Maskesi

  • Tanım: yy maskesi iki basamaklı bir yılı girmeye izin verir.
  • Yorumlama: Oracle, iki basamağın mevcut yüzyıla ait olduğunu varsayar.
    • Örneğin, eğer mevcut yıl 2023 ise, 01/05/81 tarihi 2081 yılı olarak yorumlanır.
  • Kullanım Durumu: Bu, özellikle 20. yüzyıla atıfta bulunan tarihler için beklenmedik sonuçlar doğurabilir.

rr Tarih Maskesi

  • Tanım: rr maskesi de iki basamaklı yılları kabul eder fakat bunları yorumlamak için farklı bir yöntem kullanır.
  • Yorumlama: İki basamaklı yıllar tam yılı belirlemek için yuvarlanır:
    • 50-99: 1950-1999 yılları olarak kabul edilir.
    • 00-49: 2000-2049 yılları olarak kabul edilir.
  • Örnek: Böylece, 01/05/81 tarihi 1981 olarak yorumlanır ki, bu çoğu durumda beklenen referanstır.

Örneklerin Özeti

İşte bu maskelerin çıktıyı nasıl etkilediğine dair bir özet:

  • yy kullanan sorgu:
    • 01/05/81 tarihinin 2081 olduğunu varsayar ki bu büyük ihtimalle karşılık gelen bir işe alım yoktur.
  • rr kullanan sorgu:
    • Aynı tarihi 1981 olarak görür ki, bu muhtemelen emp tablosunda işe alım kayıtlarına sahiptir.

Sonuç

Oracle SQL sorgularında tarihlerle çalışırken yy ve rr arasındaki farkları anlamak oldukça kritik öneme sahiptir. yy gelecekteki yılların yanlış yorumlanmasına yol açarken, rr maskesi yuvarlama kuralları ile iki basamaklı yılları dönüştürmek için daha mantıklı bir yaklaşım sağlar.

Doğru maskeyi seçmek, istemeden veri dışlamanın önüne geçebilir ve SQL sorgularınızın istenen sonuçları vermesini sağlayabilir. Tarih verileri ile ilgili çoğu durumda, netlik ve doğruluk için rr maskesi önerilir.

İki basamaklı yıllarla çalışırken, verinizin bağlamını ve mevcut yılı dikkate aldığınızdan emin olun; böylece yanlış yorumlama ve hata yapma riskinizi azaltırsınız.