2015-11-02 32 views
-1
update template 
set activedate=(SELECT unique activedate 
       from template 
       where status = 'Draft' 
         and activedate like '%01-JAN-99%') 
where status = 'Draft' 
     and activedate not like '%01-JAN-99%; 

當我使用上面的語句時,日期更新爲由JDBC前端更新的01-JAN-2099。 但是,當我使用下面的查詢而不是在oracle sql中更新日期列的行爲不正常

update template 
set activedate = '01JAN-99' 
where status = 'Draft' 
     and activedate not like '%01-JAN-99%; 

可能有人解釋爲什麼會出現這種情況?

+1

什麼activedate列的數據類型? – Boneist

+1

你想做什麼? – Moudiz

+1

'LIKE'用於字符串值,**不**用於日期 –

回答

1

當你與日期這樣操作,你需要將它們轉換爲varchar

to_char(sysdate, 'DD-MON-YY') 

和您的查詢應該是水木清華這樣的:

update template 
set activedate = to_date('01-JAN-99', 'DD-MON-YY') 
where status = 'Draft' 
     and to_char(activedate, 'DD-MON-YY') not like '%01-JAN-99%; 

或更好(因爲有人建議使用號碼) :

update template 
set activedate = to_date('01-01-1999', 'DD-MM-YYYY') 
where status = 'Draft' 
     and activedate != to_date('01-01-1999', 'DD-MM-YYYY'); 

查看更多資訊

to_char(datetime)

to_date

+3

請注意'to_date('01 -JAN-99','DD-MON-YY')'可能會在非英語計算機上中斷(例如,如果客戶端計算機使用法語區域設置,它將失敗)。最好使用_numbers_幾個月,而不是名字。同樣''99'也是一個潛在的問題(是1999年還是2099年?)你應該**總是**使用4位年份:'to_char('01 -01-2099','dd-mm-yyyy 「)' –