如何将一个表中的日期与另一个表中的日期进行比较?

时间:2014-01-21 07:27:17

标签: sql oracle oracle11g

我需要每天为今天发生的例外生成一份报告。

我有一个“异常详细信息”列,其中存储了异常的详细信息及其发生的日期。

我有另一张桌子,我存储了我每天都在变化的当前日期。

我需要比较这两个日期,如果它们匹配,那么我生成CSV report

我设法通过在我的查询中添加日期来手动生成报告,但我会自动化它,所以我需要一个查询,它会自动从我的表中获取当前日期并将其与“除非详情“。

到目前为止,我已设法写下面的查询:

SELECT * FROM EXCEPTION
WHERE EXP_STAT  = 'OPEN'
AND SUBSTR(EXCEPTION_DETAILS ,INSTR(EXCEPTION_DETAILS,'2014-01-22')) = '2014-01-22'

我需要对此进行更改,以便我可以选择“异常详细信息”中的任何日期,并将其与另一个表中的日期进行比较,并根据该日期获取记录。

5 个答案:

答案 0 :(得分:1)

SELECT tableA.* FROM tableA, tableB
WHERE tableA.EXP_STAT  = 'OPEN'
AND SUBSTR(EXCEPTION_DETAILS ,INSTR(EXCEPTION_DETAILS,to_char(tableB.current_date,'YYYY-MM-DD')),12) = to_char(tableB.current_date,'YYYY-MM-DD');

假设你的日期表,没有重复的日期。

答案 1 :(得分:0)

我已更改您的查询,请尝试一下,它必须帮助您

SELECT * FROM EXCEPTION WHERE EXP_STAT = 'OPEN' AND SUBSTR(EXCEPTION_DETAILS ,INSTR(EXCEPTION_DETAILS,select to_char(max(dt_date),'yyyy-mm-dd') from table2)) = (select to_char(max(dt_date),'yyyy-mm-dd') from table2);

答案 2 :(得分:0)

只是想知道,为什么你实际上将当前日期存储在另一张桌子上?你为什么不简单地与TRUNC(SYSDATE)比较?

反正,

SELECT * FROM EXCEPTION, B
WHERE EXP_STAT  = 'OPEN'
AND TO_DATE(SUBSTR(EXCEPTION_DETAILS ,INSTR(EXCEPTION_DETAILS,'2014-01-22')),'DD-MM-YY') = TRUNC(B.CURRENT_DATE);

答案 3 :(得分:0)

你不需要涉及这么多功能,一个instr就足够了:

   SELECT *
     FROM EXCEPTION
    WHERE EXP_STAT  = 'OPEN'
      AND INSTR(EXCEPTION_DETAILS,'2014-01-22') > 0;

使用另一个表获取,假设您要与some_date_table表的date_field列进行比较

SELECT e.*
  FROM EXCEPTION e
 inner join some_date_table s
 WHERE e.EXP_STAT  = 'OPEN'
   AND INSTR(e.EXCEPTION_DETAILS,to_char(s.date_field, 'YYYY-MM-DD')) > 0;

答案 4 :(得分:0)

我使用ReGEX找到了解决方案:

SELECT * FROM EXCEPTION WHERE EXP_STAT ='OPEN'和REGEXP_SUBSTR(EXCEPTION_DETAILS,                 '(19 | 20)\ d \ d- -.- - 。')=(从calendar_table中选择to_char(日期,'YYYY-MM-DD'),其中date_type ='CURRENT')