2016-04-07 25 views
0

Bir Oracle Datebase ile çalışıyorum ve bugünden itibaren belirli bir aydan fazla olduğunda bir tarihi null değerine dönüştürmek istiyorum. Ben kullanıyorum

tarih biçimidir dd-mm-yy

Yani bu tabloyu söylüyorlar sağlar: Ben kullanabilirsiniz biliyorum
SQL: Tarih Bugün Certian aralığı olduğunda Tarih Null dönüştürme Bugün

WITH TEST_TABLE as (select '1' as num, '10-FEB-16' from dual 
union(select '2', '10-FEB-30' from dual) 
union(select '3', '10-FEB-50' from dual) 
union(select '4', '10-FEB-17' from dual)) 

: SELECT SYSDATE FROM DUAL; bugünün tarihi almak için ama bunu karşılaştırmak nasıl emin değilim aylara göre.

Bugünden itibaren 24 aydan büyük olduklarında tarihleri ​​null olarak nasıl değiştiririm? Böyle

+0

['ADD_MONTHS'] (https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions004.htm) burada arkadaşınız olabilir. –

+0

@ @ matt-gibson. ADD_MONTHS (SYSDATE, 12 * 2) gibi bir şey 24 ayını karşılaştıracaktır, doğru mu? –

cevap

0

şey:

update test_table 
    set dte = (case when add_months(dte, -12) < sysdate then dte end); 

Not: veritabanındaki bir date veri türü olarak bir tarih depolamak gerekir. Çıkış formatı (varsayılan olarak) DD-MMM-YY formatıdır. Ama bu sadece çıktı için biçimlendirilmiş tarih.

+0

Eğer bu işlem çok sayıda satır içeren bir tabloda yapılacaksa, add_month'leri dys yerine sysdate'e uygulamak daha iyidir; Daha sonra hesaplama sadece bir kez yapılır (Oracle optimizerın bunu algılayacak kadar akıllı olduğu varsayılıyor ... öyle mi?) – mathguy

İlgili konular