如何在两个不同条件下将日期从一个表插入另一个表

时间:2019-02-07 18:00:07

标签: sql oracle

我想获取带有条件的日期(b.date)信息(例如,当c。Code = 001时,b。日期应获取过去一个月的日期,对于c。001以外的日期,则b表b和表c中的日期应大于sysdate。 请同样找到以下说明。 创建表A 作为(选择b。日期,c。表b中的代码,表c 哪里b。代码= c.code 和b。日期应取自过去一个月的日期c。代码= 001  和b。在c时,日期应从大于sysdate的日期获取日期。代码不是001)

表A的日期和代码列下方应填充 对于前

Code       Date
Code001    7/01/19 
Code001    8/01/19
...
Code111    7/02/19  

能否请您告诉我如何使用oracle sql实现此目的?

如果您需要有关此问题的任何其他信息,或者我的解释令人困惑,请告诉我。

感谢您的支持, 瓦尼。

2 个答案:

答案 0 :(得分:0)

我不太确定这个问题,但是根据您提供的内容,我正在对两个查询进行合并(#Oracle Sql)..我知道根据表的大小,这不是一个优化的查询,可能会由于笛卡尔积而消耗资源..请参见以下内容:

select b.date,c.code from <table> b,<table> c 
where b.code=c.code 
  and c.code='001'
  and b.date>= trunc(add_months(sysdate, -1),'MM') and b.date<trunc(sysdate, 'MM')
union
select b.date,c.code from <table> b,<table> c 
where b.code=c.code 
  and c.code<>'001'
  and b.date>sysdate;

答案 1 :(得分:0)

应该可以通过实现WHERE子句中的逻辑来实现这一目标。

WHERE 
    ( c.Code = '001' AND b.Date >= TRUNC(sysdate, 'mm')
    OR b.Date >= sysdate

或者(如果您存储的是没有时间的日期)

WHERE 
    ( c.Code = '001' AND b.Date >= TRUNC(sysdate, 'mm')
    OR b.Date >= TRUNC(sysdate)

NB:日期功能在很大程度上取决于RDBMS;以上解决方案适用于Oracle。在MySQL中,您可以这样做:

WHERE 
    ( c.Code = '001' AND b.Date >= DATE_FORMAT(CURDATE(), '%Y-%m-01')
    OR b.Date >= NOW() -- or CURDATE()