2014-09-28 344 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是一个日期类型。