在Oracle SQL中使用案例表达式进行条件日期比较和分配

时间:2018-11-27 14:13:02

标签: sql oracle conditional-formatting case-expression

我是该站点和SQL的新手。我需要一些有关案例表达的帮助。

要求如下:

我有一个表T1,其中有两个日期列-eff和disc;

第二个表T2具有2个日期列-on_date和off_date;

我正在尝试构建一个单例表达式,可以在两个表之间比较日期列并根据某些条件分配值。

条件是:

•如果T1.eff和T2.disc日期设置为默认日期,即T1.eff = 1/1/1970和T2.disc = 1970

  Then set set T1.eff=T2.on_date and T2.disc=T2.off_date

•如果T1.eff> T2.on_date和T1.disc> T2.off_date

 Then set T1.disc=T2.Off_date.

•如果T1.eff

 Then set T1.eff=T2.On_date.

•如果T1.eff T2.off_date

 Then set T1.eff=T2.On_date and T1.disc=T2.Off_date

•如果T1.eff> T2.on_date和T1.disc

  Then do not update eff, disc dates, insert as is.

我开始编写一个Case表达式,并且对如何构建/编写块感到困惑;我需要将“ eff”和“ disc”日期作为一个条件进行比较,然后在单个大小写表达式中将相应的值分别分配给“ eff”和“ disc”。

SELECT

CASE T1.EFF, T1.DISC

WHEN T1.EFF = TO_DATE('01/01/1970', 'MM/DD/YYYY') AND DISC = TO_DATE('01/01/1970', 'MM/DD/YYYY')

THEN T1.EFF = T2.ON_DATE AND T1.DISC = T2.OFF_DATE

WHEN T1.EFF > T2.ON_DATE AND T1.DISC > T2.OFF_DATE

THEN T1.EFF = T1.EFF AND T1.DISC = T2.OFF_DATE

WHEN T1.EFF < T2.OFF_DATE AND T1.DISC > T2.OFF_DATE

THEN T1.EFF = T2.ON_DATE AND T1.DISC = T2.OFF_DATE

WHEN T1.EFF > T2.ON_DATE AND T1.DISC < T2.OFF_DATE

THEN T1.EFF = T1.EFF AND T1.DISC - T1.DISC

END, 

T2.ON_DATE, T2.OFF_DATE

FROM T2, T1

WHERE T1.A = T2.B 

ETC。

我不确定我们是否可以在单个case表达式中获取/使用两列。

Oracle DB-客户端版本:12.1.0.2.0

预先感谢! => VPPG

1 个答案:

答案 0 :(得分:0)

我认为您想要的是修改SELECT输出中显示的$("#datetimepicker").kendoDateTimePicker({ format: "dd/MM/yyyy HH:mm", parseFormats: ["dd/MM/yyyy", "HH:mm"], min: new Date(), dateInput: true }); EFF的值。使用单个case语句很难做到这一点,因为您想更改2列的输出。但是,如果您简化逻辑,仍然可以使其保持简单。

DISC

还要注意,我使用的是SELECT CASE WHEN T1.EFF = TO_DATE('01/01/1970', 'MM/DD/YYYY') AND DISC = TO_DATE('01/01/1970', 'MM/DD/YYYY') THEN T2.ON_DATE WHEN T1.EFF < T2.OFF_DATE AND T1.DISC > T2.OFF_DATE THEN T2.ON_DATE ELSE T1.EFF END as EFF, CASE WHEN T1.EFF > T2.ON_DATE AND T1.DISC < T2.OFF_DATE THEN T1.DISC ELSE T2.OFF_DATE END as DISC, T2.ON_DATE, T2.OFF_DATE FROM T2, T1 WHERE T1.A = T2.B; 表达式的另一种形式-有两种使用方法。

如果这不能真正解决您的问题,请告诉我,我将更新答案。