【问题标题】:fnd_date.canonical_to_date function not working in oraclefnd_date.canonical_to_date 函数在 oracle 中不起作用
【发布时间】:2014-11-23 01:58:39
【问题描述】:

我使用fnd_date.canonical_to_date 将列转换为日期数据类型。

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

【问题讨论】:

  • 你能展示你如何使用canonical_to_date吗?以及相关数据,以便我们尝试重现您的问题。
  • @SylvainLeroux 完成-请检查并告诉
  • 代码似乎没有任何问题。您可以尝试将 'RRRR' 更改为 'YYYY' 看看是否会有所不同,但这可能是从表中选择的 'ACTUAL' 值的问题。
  • 好问题。我遇到了类似的问题,+1
  • 在类型转换问题中,包含所涉及的列、变量和参数的确切类型以及会话的相关 NLS 设置会很有帮助。 l_actual_term_date 是一个字符串,但 prev_term_datep_prev_term_date 是什么?我从未听说过fnd_date.canonical_to_date,但它似乎被记录为here 接受一个“以规范日期格式”的字符串(尽管我看不到那是什么 - 也许是一些全局设置?)并返回一个日期.

标签: oracle plsql oracle-sqldeveloper toad


【解决方案1】:

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 的日期格式将其转换回日期,因此误解了年份。

【讨论】:

    【解决方案2】:

    如果 ACTUAL 列是 date 类型,则使用:

    SELECT ACTUAL INTO prev_term_date FROM per_table;
    

    如果您需要一个以规范格式表示 日期 的字符串,请执行以下操作:

    l_actual_term_date := fnd_date.date_to_canonical(prev_term_date);
    

    我假设 prev_term_datedate 类型。

    【讨论】:

      猜你喜欢
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 2022-06-15
      • 2019-11-05
      相关资源
      最近更新 更多