Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
使用上下文到日期处理在oracle查询中获取异常_Oracle - Fatal编程技术网

使用上下文到日期处理在oracle查询中获取异常

使用上下文到日期处理在oracle查询中获取异常,oracle,Oracle,下面是引发异常的oracle查询,下面是查询 SELECT GFT.*, PA.*,P.* FROM GFT_DATA GFT, CONTACT_TOKEN CT, EDUCT_ATTRIBUTE PA, PERSON P WHERE GFT.PERSON_ID = 122445220 AND GFT.TO_CONTACT_TOKEN_ID = CT.CONTACT_TOKEN_ID AND GFT.EDUCT_ATTRIBUTE_ID = PA.EDUCT_ATTRIBUTE_ID AND

下面是引发异常的oracle查询,下面是查询

SELECT GFT.*, PA.*,P.* FROM GFT_DATA GFT, CONTACT_TOKEN CT, EDUCT_ATTRIBUTE PA,
PERSON P WHERE GFT.PERSON_ID = 122445220 AND GFT.TO_CONTACT_TOKEN_ID = CT.CONTACT_TOKEN_ID 
AND GFT.EDUCT_ATTRIBUTE_ID = PA.EDUCT_ATTRIBUTE_ID AND GFT.PERSON_ID = P.PERSON_ID
AND GFT.CREATED_ON  > CAST ('3-JUN-18 00:00:00' AS DATE) 
AND GFT.CREATED_ON <= CAST ('5-JUN-18 23:59:59' AS DATE);
现在,请告知我如何更正上述查询,以便它提供6月3日、6月4日和6月6日的所有日期的数据
6月5日,我也在使用cast是否有效或是否有其他更好的选择?问题是,现场创建的日期格式不清楚。这个问题很可能是因为您比较的日期格式错误

下面是ORA-01830错误的有用链接


日期的转换依赖于NLS会话参数,它们当前与您提供的字符串格式不匹配。作为演示:

alter session set nls_date_format = 'DD-MON-RR';

select CAST ('3-JUN-18 00:00:00' AS DATE) from dual;

ORA-01830: date format picture ends before converting entire input string

alter session set nls_date_format = 'DD-MON-RR HH24:MI:SS';

select CAST ('3-JUN-18 00:00:00' AS DATE) from dual;

CAST('3-JUN-1800:0
------------------
03-JUN-18 00:00:00
最好使用
to_date()
函数完全避免该问题,该函数允许您指定字符串格式:

AND GFT.CREATED_ON  > TO_DATE('3-JUN-18 00:00:00', 'DD-MON-RR HH24:MI:SS', 'NLS_DATE_LANGUAGE=ENGLISH') 
AND GFT.CREATED_ON <= TO_DATE('5-JUN-18 23:59:59', 'DD-MON-RR HH24:MI:SS', 'NLS_DATE_LANGUAGE=ENGLISH');
而且它还可以通过明确的日期文字进一步简化:

AND GFT.CREATED_ON >= DATE '2018-06-03' 
AND GFT.CREATED_ON <  DATE '2018-06-06';
和GFT.CREATED_于>=日期'2018-06-03'
和GFT.U于<日期'2018-06-06'创建;


顺便说一句,您应该真正开始使用现代连接语法,使用
*
通常不是一个好主意-最好从每个表中列出您实际需要的列。首先,联接条件中使用的列将显示两次,每个联接表中显示一列。

您必须将
CAST
替换为
TO\u DATE

to_date('3-JUN-18 00:00:00','DD-MON-RR HH24:MI:SS')  
我建议对日期字符串使用:

to_date('2018-06-03 00:00:00','yyyy-mm-dd hh24:mi:ss')

在Oracle中,“DATE”类型的列和变量没有格式。
AND GFT.CREATED_ON >= TO_DATE('03/06/2018', 'DD/MM/YYYY') 
AND GFT.CREATED_ON <  TO_DATE('06/06/2018', 'DD/MM/YYYY');
AND GFT.CREATED_ON >= DATE '2018-06-03' 
AND GFT.CREATED_ON <  DATE '2018-06-06';
to_date('3-JUN-18 00:00:00','DD-MON-RR HH24:MI:SS')  
to_date('2018-06-03 00:00:00','yyyy-mm-dd hh24:mi:ss')