【问题标题】:How do I compare a date from one table with the date present in another table?如何将一张表中的日期与另一张表中的日期进行比较?
【发布时间】:2014-01-23 15:51:19
【问题描述】:

我需要每天为今天发生的异常生成报告。

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

我有另一个表,我存储我当前的日期,每天都在变化。

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

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

到目前为止,我已经设法编写了以下查询:

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

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

【问题讨论】:

  • 您能否使用desc 命令描述您的表格。
  • 假设:表 A (EXP_STAT varchar2(5), Exception_details Varchar2(500)) 表 B(current_date Date)

标签: sql oracle oracle11g


【解决方案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');

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

【讨论】:

  • SUBSTR(EXCEPTION_DETAILS ,INSTR(EXCEPTION_DETAILS,to_char(tableB.current_date,'YYYY-MM-DD')),12)... 这与 tableB.current_date 无关。可以是任何日期。我只需要获取并将其与表 B 中的日期进行比较
【解决方案2】:

我已更改您的查询,请尝试一下,它一定对您有帮助

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);

【讨论】:

    【解决方案3】:

    只是想知道,为什么您实际上将当前日期存储在另一个表上?为什么不简单地与 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);
    

    【讨论】:

    • 检查任何语法错误,还没有在实际环境中尝试过,现在没有
    【解决方案4】:

    你不需要涉及这么多功能,一个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;
    

    【讨论】:

      【解决方案5】:

      我已经使用 RegEX 找到了解决方案:

      SELECT * FROM EXP_STAT = 'OPEN' AND REGEXP_SUBSTR(EXCEPTION_DETAILS, '(19|20)\d\d- -.- -.') = (select to_char(date, 'YYYY-MM-DD') from calendar_table where date_type='CURRENT')

      【讨论】:

      • 编辑答案以查看整个查询。似乎在显示答案时被打断了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多