【发布时间】:2017-08-31 16:15:29
【问题描述】:
如果我从我的 Oracle DB 在 PL/SQL 中运行以下选择,我会返回预期结果:
select * from risk t where t.accounting_to_date='01-JAN-3000'
当我在 Crystal Reports 2016 中使用命令和 Oracle 连接运行相同的选择语句时,我无法提取任何数据。
我找到的解决方法是:
-
在我的 Crystal Report 命令中使用 to_date 函数,如下所示:
select * from risk t where t.accounting_to_date= to_date('01-JAN-3000','dd-MON-yyyy')
或
- 使用 ODBC 连接。
这两种解决方法都有效。但是,我的问题是:是什么导致了这个问题?有没有可以更改的设置?是 Oracle 方面的问题还是 Crystal Reports 方面的问题?这是一个错误吗?
我只是想弄清楚为什么会发生这种情况。我必须使用 Oracle 连接,而不是 ODBC,因此我无法使用这种解决方法。在 Oracle 或 Crystal 中使用每个日期周围的 to_date 是压倒性的。我已经不得不将此功能添加到几十个日期,而且还有数百个。
当我们将连接 Crystal Reports 的方式从使用 ODBC 连接更改为 Oracle 连接时,我偶然发现了这一点。我发现了很多缺失的数据,并通过使用 to_date 函数进行了更正。
提前谢谢你。
【问题讨论】:
-
如果
accounting_to_date是一个日期,那么将它与字符串01-JAN-3000进行比较涉及到隐式数据转换。您应该始终对日期使用显式数据转换。 -
您可以在 Oracle 中将日期文字指定为
date '3000-01-31'或更详细的to_date()表达式(如果您真的需要)。'01-JAN-3000'只是一个字符串,您相信当前的默认设置会按照您希望的方式进行转换。如果有人从具有不同语言设置的桌面运行此程序怎么办?
标签: oracle plsql crystal-reports to-date