我有很多天没有解决的问题,我一直在搜索并在许多问题中回答,似乎我的数据库中的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%`'
并且没有显示任何内容
对此有何想法? 感谢
答案 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"
提供了此引用作为第一个匹配:
该参考手册显示了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
是否适合您。