Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择带条件的日期时间(Oracle)_Sql_Oracle_Select_Remedy - Fatal编程技术网

Sql 选择带条件的日期时间(Oracle)

Sql 选择带条件的日期时间(Oracle),sql,oracle,select,remedy,Sql,Oracle,Select,Remedy,我有很多天没有解决的问题,我一直在搜索并跟踪许多问题的答案,我的数据库中datetime的结构数据似乎很奇怪。我读过这篇文章: 但这对我没用。 好的,让我们开始讨论这个问题 Im使用ODBC connect获取ORACLE数据库中的数据,以用于补救客户端 当我使用以下简单查询进行选择时: select Create_Date from HPD_Help_Desk_SLA 结果是: Create_Date 2014-07-01 05:27:02.000 2014-07-02 05:27:02.

我有很多天没有解决的问题,我一直在搜索并跟踪许多问题的答案,我的数据库中datetime的结构数据似乎很奇怪。我读过这篇文章: 但这对我没用。 好的,让我们开始讨论这个问题

Im使用ODBC connect获取ORACLE数据库中的数据,以用于补救客户端

当我使用以下简单查询进行选择时:

select Create_Date from HPD_Help_Desk_SLA 
结果是:

Create_Date
2014-07-01 05:27:02.000
2014-07-02 05:27:02.000
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 >= TO_DATE('2014-05-03', 'YYYY-MM-DD') AND Create_Date <  TO_DATE('2014-08-04', 'YYYY-MM-DD')
我试着做一个简单的查询:

select Create_Date from HPD_Help_Desk_SLA where Create_Date <= '2014-08-04'
这没有显示任何东西

有什么想法吗?
谢谢

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

其中创建日期=截止日期('2014-08-04','YYYY-MM-DD')

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

如果问题与
ODBC
相关,则即使已修复,也会出现与日期时间格式相关的错误(ii数据类型为
DATE
)。这取决于您的
NLS\u日期\u格式

比如说,

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>从emp中选择empno、ename、hiredate,其中hiredate从emp中选择empno、ename、hiredate,其中hiredate
所以,为了安全起见

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>
SQL>从emp-WHERE-hiredate中选择empno、ename、hiredate
更新我没有看到OP已经用于日期
,因此问题似乎不是日期格式

使用
更新日期时,会引发错误。数据库很可能不是Oracle,因此特定数据库中无法识别迄今为止的功能

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

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

错误消息显示您正在使用:
[AR系统ODBC驱动程序]

您使用的ODBC数据源连接到AR系统,而不是直接连接到Oracle数据库。这意味着查询的语法必须是AR系统允许的语法(即使Oracle数据库“在”AR系统下运行)。因此,使用
到\u DATE
时会出现错误

您需要为AR系统中的日期查询找出正确的语法

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

我想你应该问一个有AR系统知识的人,不要问太多Oracle知识

编辑:

Google for
“AR系统”“Oracle”
将此引用作为第一次点击:

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


因此,我的建议是询问AR系统开发人员而不是Oracle开发人员。

您使用的是哪种ODBC驱动程序?可能是ODBC驱动程序抱怨至今不理解。我同意。看起来ODBC认为它连接到了另一个dbms,而不是Oracle。是的,也许这就是问题所在,你对此有什么想法吗?cz我想显示按日期过滤的数据。实际上,我不能去表数据库看看数据库的结构是什么,我只是用客户机来选择数据,但我的老板说是oracle数据库,你使用的是ODBC数据源。检查该数据源并查看它使用的驱动程序。是Oracle ODBC驱动程序吗?它是用于Oracle的Microsoft驱动程序吗?是第三个司机吗?我猜解决方案是安装Oracle ODBC驱动程序(如果尚未安装),并使用Oracle ODBC驱动程序创建一个连接到数据库的ODBC数据源。这将确保您可以在编写的SQL中使用所有Oracle语法(而不是现在驱动程序不理解您尝试使用的语法)。实际上,您的错误消息显示您正在使用:
[AR System ODBC driver]
。您使用的ODBC数据源连接到AR系统,而不是直接连接到Oracle数据库。这意味着查询的语法必须是AR系统允许的语法(即使Oracle数据库在AR系统下运行)。如果切换到Oracle ODBC驱动程序和数据源,可能需要不同的连接凭据,因为您将绕过AR系统直接访问数据库。我认为您应该询问具有AR系统知识的人,而不是Oracle。它仍然给出一个错误:警告:odbc_exec():SQL错误:[AR系统odbc驱动程序]列未找到..这似乎与OP实际存在的问题无关。它没有解决截至日期的
错误,他们已经在搜索一个范围,并且trunc's column可能会停止使用索引?似乎问题不同。但我的理解是,当OP说没有返回行时,我认为这仅仅是因为文字。如果ODBC连接是个问题,那么这个问题与我的解决方案完全不同。他们已经在原始查询中使用了
to_date
,并使用了一个格式模型来获取问题所涉及的错误。另外两个查询似乎试图隔离问题,但解决这些问题无助于解决根本问题。啊,你是对的。我一直在关注OP.My bad的最后两个问题。谢谢你的回复,是的,我想这就是为什么我的查询忽略了日期的问题。但直到现在我
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>