2014-09-28 179 views
1

我已經使用fnd_date.canonical_to_date將列轉換爲日期數據類型。fnd_date.canonical_to_date函數不能在oracle中工作

the expected output is for example:29-JAN-2014 
but i am getting : 29-JAN-0014 

有人知道爲什麼嗎?

l_actual_term_date varchar2(100); 

SELECT to_char(ACTUAL,'DD-MON-RRRR') 
      INTO l_actual_term_date   
      FROM per_table; 

--assign to another variable as per reqmt of date type 

prev_term_date :=l_actual_term_date; 
--WHEN printed this will give 29-JAN-12 

--then in another package have to aasign prev_term_date to a varchar type variable 

P_prev_term_date :=fnd_date.canonical_to_date(prev_term_date); 

--when i print this P_prev_term_date i get - 29-JAN-0014 instead of 29-JAN-2014 
+0

你能告訴你如何使用'canonical_to_date'嗎?和相關的數據,所以我們可以嘗試重現您的問題。 – 2014-09-28 16:49:24

+0

@SylvainLeroux done-pls checkand tell – user3809240 2014-09-28 17:43:55

+0

代碼沒有出現任何問題。您可以嘗試將「RRRR」更改爲「YYYY」並查看是否有所作爲,但這可能是從表格中選擇「實際」值的問題。 – 2014-09-29 06:38:29

回答

2

prev_term_date可能是一個日期變量,和您的默認日期格式爲dd.mon.yy。當您調用fnd_date.canonical_to_date(prev_term_date)時,會發生什麼情況是使用默認日期格式dd.mon.yyprev_term_date隱式轉換爲VARCHAR2; fnd_date.canonical_to_date然後使用日期格式dd.mon.yyyy將其轉換回日期,因此誤解了年份。

0

如果實際列是日期類型,然後使用:

SELECT ACTUAL INTO prev_term_date FROM per_table; 

如果你需要一個代表日期規範格式字符串做:

l_actual_term_date := fnd_date.date_to_canonical(prev_term_date); 

我認爲prev_term_date是一個日期類型。