CASE..WHEN 条件在 Oracle Sql 中不起作用
CASE..WHEN condition not working in Oracle Sql
我在查询中有以下 case when
条件,但不知何故无法满足。
我想在 select
查询中的 case when
中编写逻辑,这样当 LAST_TRADEABLE_DT
不为空时,然后取 LAST_TRADEABLE_DT
,当 LAST_TRADEABLE_DT
为空时则应满足以下条件:
WHEN t.opt_exer_typ = 'American'
AND t.mic_exch_code = 'XDMI'
THEN t.opt_expire_dt - 1
WHEN t.opt_exer_typ != 'American'
THEN t.opt_expire_dt
我在下面写了查询,但我得到的 last_tradedate
为空。我从不想 last_tradedate
到 return null.
SELECT
t.opt_exer_typ,
t.mic_exch_code,
t.ID_BB_GLOBAL,
t.LAST_TRADEABLE_DT,
t.OPT_EXER_TYP,
(
CASE
WHEN t.LAST_TRADEABLE_DT is not null
THEN t.LAST_TRADEABLE_DT
WHEN t.LAST_TRADEABLE_DT IS NULL
AND t.opt_exer_typ = 'American'
AND t.mic_exch_code = 'XDMI'
THEN t.opt_expire_dt - 1
WHEN t.LAST_TRADEABLE_DT IS NULL
AND t.opt_exer_typ != 'American'
THEN t.opt_expire_dt
END) last_tradedate,
t.OPT_EXPIRE_DT
FROM
TEST_AGG t where t.ID_BB_GLOBAL = 'XXX1234';
如果您不希望该值永远是 NULL
,则使用 ELSE
。我想你想要:
(CASE WHEN t.LAST_TRADEABLE_DT is not null
THEN t.LAST_TRADEABLE_DT
WHEN t.opt_exer_typ = 'American' AND
t.mic_exch_code = 'XDMI'
THEN t.opt_expire_dt - 1
ELSE t.opt_expire_dt
END) last_tradedate,
我不是 100% 确定这就是您想要的逻辑。在以下情况下,您的代码将 return NULL
值:
opt_exer_typ = 'American' and mic_exch_code <> XDMI
opt_exer_typ = 'American' and mic_exch_code IS NULL
opt_exer_typ IS NULL
(假设不满足第一个条件)。
我在查询中有以下 case when
条件,但不知何故无法满足。
我想在 select
查询中的 case when
中编写逻辑,这样当 LAST_TRADEABLE_DT
不为空时,然后取 LAST_TRADEABLE_DT
,当 LAST_TRADEABLE_DT
为空时则应满足以下条件:
WHEN t.opt_exer_typ = 'American'
AND t.mic_exch_code = 'XDMI'
THEN t.opt_expire_dt - 1
WHEN t.opt_exer_typ != 'American'
THEN t.opt_expire_dt
我在下面写了查询,但我得到的 last_tradedate
为空。我从不想 last_tradedate
到 return null.
SELECT
t.opt_exer_typ,
t.mic_exch_code,
t.ID_BB_GLOBAL,
t.LAST_TRADEABLE_DT,
t.OPT_EXER_TYP,
(
CASE
WHEN t.LAST_TRADEABLE_DT is not null
THEN t.LAST_TRADEABLE_DT
WHEN t.LAST_TRADEABLE_DT IS NULL
AND t.opt_exer_typ = 'American'
AND t.mic_exch_code = 'XDMI'
THEN t.opt_expire_dt - 1
WHEN t.LAST_TRADEABLE_DT IS NULL
AND t.opt_exer_typ != 'American'
THEN t.opt_expire_dt
END) last_tradedate,
t.OPT_EXPIRE_DT
FROM
TEST_AGG t where t.ID_BB_GLOBAL = 'XXX1234';
如果您不希望该值永远是 NULL
,则使用 ELSE
。我想你想要:
(CASE WHEN t.LAST_TRADEABLE_DT is not null
THEN t.LAST_TRADEABLE_DT
WHEN t.opt_exer_typ = 'American' AND
t.mic_exch_code = 'XDMI'
THEN t.opt_expire_dt - 1
ELSE t.opt_expire_dt
END) last_tradedate,
我不是 100% 确定这就是您想要的逻辑。在以下情况下,您的代码将 return NULL
值:
opt_exer_typ = 'American' and mic_exch_code <> XDMI
opt_exer_typ = 'American' and mic_exch_code IS NULL
opt_exer_typ IS NULL
(假设不满足第一个条件)。