Sql where子句中的Oracle if语句
我有以下疑问Sql where子句中的Oracle if语句,sql,oracle,if-statement,Sql,Oracle,If Statement,我有以下疑问 SELECT * FROM( SELECT CASE WHEN TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM') = '10' THEN TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM') WHEN SUBSTR (TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM'
SELECT * FROM(
SELECT
CASE
WHEN TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM') = '10'
THEN
TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM')
WHEN SUBSTR (TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM'), 1, 1) = '0'
THEN
SUBSTR (TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM'), 2, 1)
ELSE
SUBSTR (TO_CHAR (ADD_MONTHS(:DATEINPUT, 1), 'MM'), 1, 2)
END
AS CUR_MONTH_FRMTD,
P.OPR_DATE,
P.INDICE,
P.LOAD_TYPE,
P.CONTRACT_MONTH,
P.CONTRACT_YEAR,
P.VALUE,
P.DATE_INSERTED,
P.DATE_UPDATED
FROM ZE_DATA.PWX_FWD_CURVE P ) Q
WHERE
Q.LOAD_TYPE = 'HLH'
AND Q.INDICE = 'MidC'
AND Q.CONTRACT_YEAR = TO_CHAR(:DATEINPUT, 'YYYY')
AND Q.CONTRACT_MONTH = Q.CUR_MONTH_FRMTD
AND TO_CHAR(Q.DATE_INSERTED, 'MM') = TO_CHAR(:DATEINPUT, 'MM')
AND TO_CHAR(Q.DATE_INSERTED, 'YY') = TO_CHAR(:DATEINPUT, 'YY')
AND TO_CHAR(Q.DATE_INSERTED, 'DD') = TO_CHAR(:DATEINPUT, 'DD')
将记录的范围缩小到插入当天,只按要求返回一条记录,效果非常好。但问题是周六或周日没有插入任何记录,这破坏了过滤的有效性
周六或周日我需要周五的数据。我认为下面这样的逻辑会起作用。但这不能在oracle SQL中完成
IF TO_CHAR(:DATEINPUT, 'DAY') = 'SATURDAY' THEN
WHERE
....
AND TO_CHAR(Q.DATE_INSERTED, 'DD') = TO_CHAR(:DATEINPUT-1, 'DD')
ELSE IF TO_CHAR(:DATEINPUT, 'DAY') = 'SUNDAY' THEN
WHERE
....
AND TO_CHAR(Q.DATE_INSERTED, 'DD') = TO_CHAR(:DATEINPUT-2, 'DD')
此时,我需要在select语句中实现这一点。无法使用存储过程。有人能想出一个解决方案或解决方法吗?而不是一个IF,为什么不只是一个嵌套的或类似的
Where ...
AND
(
(TO_CHAR(:DATEINPUT, 'DAY') = 'SATURDAY' AND TO_CHAR(Q.DATE_INSERTED, 'DD') = TO_CHAR(:DATEINPUT-1, 'DD'))
OR
(TO_CHAR(:DATEINPUT, 'DAY') = 'SUNDAY' AND TO_CHAR(Q.DATE_INSERTED, 'DD') = TO_CHAR(:DATEINPUT-2, 'DD'))
)
AND ...
如果我已经理解了要求,那么这个怎么样:
where q.date_inserted =
case to_char(:dateinput,'fmDy','nls_date_language = English')
when 'Sat' then :dateinput -1
when 'Sun' then :dateinput -2
else :dateinput
end;
(如果date列和参数可以包含时间,则会变得稍微复杂一些。如果date列没有索引或分区键,则可以将trunc()
放在所有内容周围;如果是,则可能值得在之间构建一个表达式。)