【发布时间】:2021-07-22 10:27:54
【问题描述】:
我正在尝试在 oracle 中将 DD-MON-RR 转换为 YYYY-MM-DD 格式 我已经编写了以下转换,它在 SQL Developer 中运行良好。
TO_CHAR(TO_DATE(日期,'DD-MON-RR'),'YYYY-MM-DD')
但是,如果我在 SSIS 中使用相同的查询,它会抛出 ORA-01861 Literal does not match the format string。
感谢任何帮助!
【问题讨论】:
-
如果
date部分已经是一个日期,那么不要为此调用to_date();就做TO_CHAR(date,'YYYY-MM-DD')。 See this answer 解释一下。 -
嗨@AlexPoole,实际问题是我有一个日期列,其值为58 年10 月1 日。这是一个出生日期列,表示它是 1958 年 10 月 1 日。当我将此数据移动到 SQL Server 时,它被加载为 01-10-0258。所以我正在做上面的转换,它在 SQL Developer 中工作,但在 SSIS 中给出 ORA-01861 错误。
-
如果您将它作为日期 移动,那么这不应该发生。如果您希望它作为 YYYY-MM-DD 格式的字符串,则只需使用
to_char()。 -
列中的数据 - 20-JUL-58 转换:TO_CHAR(TO_DATE(date,'DD-MON-RR'),'YYYY-MM-DD')) 输出:1958-07- 20 如果我按日期执行:TO_DATE(date,'DD-MON-RR') 输出:20-JUL-58 as char YYYY-MM-DD TO_CHAR(date,'YYYY-MM-DD') 输出:0258- 07-20
-
如果列是日期,那么 20-JUL-58 就是您的客户显示值的方式。 Oracle 有自己的内部表示。请阅读以前的 cmets 和我链接到的旧答案(至少是前半部分)。您只需要
TO_CHAR(date,'YYYY-MM-DD')。如果这给你 0258-07-20 那么你的日期实际上是在 258 年 - 可能是因为插入时函数调用、隐式转换和 NLS 设置的类似混淆。