选择具有条件的日期时间(Oracle)

时间:2014-10-28 07:21:54

标签: sql oracle select remedy

我有很多天没有解决的问题,我一直在搜索并在许多问题中回答,似乎我的数据库中的datetime的结构数据如此奇怪。我看过这篇文章:Select from table by knowing only date without time (ORACLE) 但这对我不起作用。 好吧,让我们开始解决这个问题,

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

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

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%`'

并且没有显示任何内容

对此有何想法? 感谢

2 个答案:

答案 0 :(得分:1)

我的评论&#34;已升级&#34;根据要求给出正确答案:

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

您正在使用连接到AR系统的ODBC数据源,而不是直接连接到Oracle数据库。这意味着查询的语法必须是AR System允许的任何语法(即使Oracle数据库运行&#34;&#34; AR系统。)因此,您使用TO_DATE会收到错误。

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

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

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

编辑:

Google为"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系统&#34;时间戳&#34;在Oracle中保存为数字。我几乎可以肯定这意味着当您使用AR System ODBC驱动程序时,您需要在AR System语法的ODBC调用中编写SQL。然后AR System ODBC驱动程序将其重写为安装AR System的任何关系数据库所需的语法。

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

答案 1 :(得分: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 是否适合您。