Sql 比较oracle中两个日期之间的天数差异

Sql 比较oracle中两个日期之间的天数差异,sql,oracle,Sql,Oracle,在查询的where子句中,我需要检查两天之间的差异是否大于7天。我尝试了以下方法,还尝试了datediff、dateadd、trunc和tochar,但每次都会出现不同的错误。 任何帮助都是值得的。 对于以下内容,我得到了ORA-01858:在需要数字的地方找到了一个非数字字符: 日期1-2>7 发布查询: SELECT * FROM frm_rg_ps_rg ps_rg WHERE ((SELECT COUNT(*) FROM frm_rg_ps_rg b WHERE ps_rg.

在查询的where子句中,我需要检查两天之间的差异是否大于7天。我尝试了以下方法,还尝试了datediff、dateadd、trunc和tochar,但每次都会出现不同的错误。 任何帮助都是值得的。 对于以下内容,我得到了ORA-01858:在需要数字的地方找到了一个非数字字符:

日期1-2>7

发布查询:

SELECT *
FROM frm_rg_ps_rg ps_rg
WHERE 

((SELECT COUNT(*)
  FROM frm_rg_ps_rg b
  WHERE ps_rg.patient_id = b.patient_id
  AND ps_rg.formdata_seq = b.formdata_seq
  AND ps_rg.psdate IS NOT NULL
  AND b.psdate IS NOT NULL
  AND ps_rg.psresult IS NOT NULL
  AND b.psresult IS NOT NULL) = 1)


OR NOT EXISTS
  (SELECT *
  FROM frm_rg_ps_rg c
  WHERE (ps_rg.psdate IS NOT NULL AND c.psdate IS NOT NULL AND ps_rg.psresult IS NOT NULL AND c.psresult IS NOT NULL)
  AND ps_rg.patient_id = c.patient_id
  AND ps_rg.formdata_seq = c.formdata_seq
  AND ps_rg.elemdata_seq!=c.elemdata_seq
  AND ps_rg.psresult != c.psresult    
  --AND to_char(ps_rg.psdate ,'yyyy-mm-dd') - to_char(c.psdate ,'yyyy-mm-dd') > 7
  --AND Trunc(ps_rg.psdate) > Trunc(c.psdate)+7
  AND ps_rg.psdate - c.psdate > 7  
  )

AND ps_rg.psresult IS NOT NULL
AND ps_rg.psdate IS NOT NULL;

假设字符串列以“yyyy-mm-dd”格式保存日期,如果需要,请对其进行更改

to_date(date1,'yyyy-mm-dd') - to_date(date2,'yyyy-mm-dd') > 7
操作演示

create table t (dt1 date,dt2 date);
insert into t (dt1,dt2) values (sysdate,sysdate-10); 

我可以想出一种方法,通过以下语句获得此错误:

date1 - date2 > 7
而且两者都是约会对象。如果行中有隐藏字符,即>和7之间或7之后的不可见字符,则可能发生这种情况


您可以尝试删除该行并重新键入,以查看错误是否消失。

此问题现已解决: 我试过这个:
然后从dual>7中选择ps_rg.psdate-c.psdate这些值是什么数据类型?日期或时间戳?非数字字符将位于字符串中,而不是日期。因此,您的一列或两列都是字符串,而不是日期或数字。这些是日期字段请向我们显示您的完整查询。如果date1和date2都是日期类型,则不应出现此错误。@WernfriedDomscheit。或者,更具体地说,如果出现此错误,它不是指此计算-假设这两列是日期。我已经发布了查询。再说一次,日期我;m试图比较的类型为DATEName空类型---------------患者\u ID非空编号研究\u ID非空编号过程步骤\u ID非空编号FORMDATA \u SEQ非空编号ELEMDATA \u SEQ编号PSUNITOSVARCHAR23950 CHAR PSDATE DATE PSND VARCHAR21 CHAR PSRESULT NUMBER PSUNITS VARCHAR2120这不是答案。如果这样做有效,那么ps_rg.psdate-c.psdate>7肯定有效。这不是问题所在。请参阅我的演示答案。
select * from t where (select dt1-dt2 from dual) > 7;

+---------------------+---------------------+
| DT1                 | DT2                 |
+---------------------+---------------------+
| 2016-12-14 10:59:34 | 2016-12-04 10:59:34 |
+---------------------+---------------------+
select * from t where dt1-dt2 > 7;

+---------------------+---------------------+
| DT1                 | DT2                 |
+---------------------+---------------------+
| 2016-12-14 10:59:34 | 2016-12-04 10:59:34 |
+---------------------+---------------------+
date1 - date2 > 7