3

我有很多天没有解决的问题,我一直在寻找并关注很多问题的答案,看起来我数据库中日期时间的结构数据很奇怪。我读过这篇文章:通过只知道没有时间的日期(ORACLE)从表中选择, 但这对我不起作用。好吧,让我们开始解决问题,

我使用 ODBC 连接在 ORACLE 数据库中为 Remedy Client 获取数据。

当我选择这样的简单查询时:

select Create_Date from HPD_Help_Desk_SLA 

结果:

Create_Date
2014-07-01 05:27:02.000
2014-07-02 05:27:02.000

但是当我尝试这个查询时:

select Create_Date from HPD_Help_Desk_SLA where Create_Date >= TO_DATE('2014-05-03', 'YYYY-MM-DD') AND Create_Date <  TO_DATE('2014-08-04', 'YYYY-MM-DD')

结果:

Warning: odbc_exec(): SQL error: [AR System ODBC Driver]Column not found: ., SQL state S0000 in SQLExecDirect in....

我尝试这个简单的查询:

select Create_Date from HPD_Help_Desk_SLA where Create_Date <= '2014-08-04'

select Create_Date from HPD_Help_Desk_SLA where Create_Date like '2014-07-01%`'

这没有显示任何东西

对此有什么想法吗?谢谢

4

2 回答 2

1

根据要求,我的评论“升级”为正确答案:

您的错误消息显示您正在使用:[AR System ODBC Driver]

您正在使用连接到 AR 系统而不是直接连接到 Oracle 数据库的 ODBC 数据源。这意味着查询的语法必须是 AR System 允许的任何语法(即使 Oracle 数据库在 AR System 的“下方”运行)。因此,使用TO_DATE.

您要么需要找出 AR System 中日期查询的正确语法。

或者您可以切换到 Oracle ODBC 驱动程序和数据源,但是您可能需要不同的连接凭据,因为您将绕过您的 AR 系统并直接访问数据库。这可能是您设置中的安全问题。

我认为您应该问具有 AR System 知识的人,而不是 Oracle 知识。

编辑:

Google for"AR System" "Oracle"将此参考作为第一击:

http://www.unc.edu/remedy/clients/7.0.1/BMC%20Remedy%20AR%20System%20Server%207-0-01/Database-Ref-700.pdf

该参考手册展示了 AR System 如何在多个不同的关系数据库上运行,Oracle 就是其中之一。第 23 页显示 AR 系统“时间戳”作为数字保存在 Oracle 中。我几乎可以肯定,这意味着当您使用 AR System ODBC 驱动程序时,您需要在 ODBC 调用中以 AR System 语法编写 SQL。然后 AR System ODBC 驱动程序将其重写为安装 AR System 的任何关系数据库所需的语法。

因此,它强化了我询问 AR System 开发人员而不是 Oracle 开发人员的建议。

于 2014-10-28T11:43:28.637 回答
0

您正在将日期与文字进行比较。使用 to_date 将文字转换为日期。

where Create_Date = to_date( '2014-08-04', 'YYYY-MM-DD')

trunc将截断时间部分。该查询将返回该日期的所有行。对于日期范围,如果您担心时间部分,请删除 trunc。

如果问题与 相关ODBC,那么即使已修复,您也会收到与日期时间格式相关的错误(ii 数据类型为DATE)。这取决于您的NLS_DATE_FORMAT.

例如,

SQL> SELECT empno, ename, hiredate FROM emp WHERE hiredate <='20/02/1981';
SELECT empno, ename, hiredate FROM emp WHERE hiredate <='20/02/1981'
                                                        *
ERROR at line 1:
ORA-01843: not a valid month


SQL>

但是,通过隐式转换,将执行下一个查询。

SQL> SELECT empno, ename, hiredate FROM emp WHERE hiredate <='20-FEB-1981';

     EMPNO ENAME      HIREDATE
---------- ---------- ---------
      7369 SMITH      17-DEC-80
      7499 ALLEN      20-FEB-81

SQL>

所以,为了安全起见,

SQL> SELECT empno, ename, hiredate FROM emp WHERE hiredate <=to_date('20-FEB-1981','DD-MON-YYYY');

     EMPNO ENAME      HIREDATE
---------- ---------- ---------
      7369 SMITH      17-DEC-80
      7499 ALLEN      20-FEB-81

SQL>

更新我没有看到 OP 已经使用TO_DATE,因此问题似乎不是日期格式。

使用时TO_DATE,会抛出错误。数据库很可能不是 Oracle,因此TO_DATE在特定数据库中无法识别该功能。

检查是否select * from v$version适合您。

于 2014-10-28T07:31:51.407 回答