我需要每天为今天发生的例外生成一份报告。
我有一个“异常详细信息”列,其中存储了异常的详细信息及其发生的日期。
我有另一张桌子,我存储了我每天都在变化的当前日期。
我需要比较这两个日期,如果它们匹配,那么我生成CSV report
。
我设法通过在我的查询中添加日期来手动生成报告,但我会自动化它,所以我需要一个查询,它会自动从我的表中获取当前日期并将其与“除非详情“。
到目前为止,我已设法写下面的查询:
SELECT * FROM EXCEPTION
WHERE EXP_STAT = 'OPEN'
AND SUBSTR(EXCEPTION_DETAILS ,INSTR(EXCEPTION_DETAILS,'2014-01-22')) = '2014-01-22'
我需要对此进行更改,以便我可以选择“异常详细信息”中的任何日期,并将其与另一个表中的日期进行比较,并根据该日期获取记录。
答案 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')