Sql 在oracle中,是否有任何方法可以添加CASE-WHEN语句
因此,如果输入参数:STATUS!=无效的现在,我来到这里Sql 在oracle中,是否有任何方法可以添加CASE-WHEN语句,sql,oracle,Sql,Oracle,因此,如果输入参数:STATUS!=无效的现在,我来到这里 ... WHERE NSR_DATCRE BETWEEN to_date(:NUMDAYS1, 'DD.MM.RRRR') AND to_date(:NUMDAYS2, 'DD.MM.RRRR') AND CASE WHEN :STATUS = null then NSR_STATUS != 1 else NSR_STATUS = :STATUS AND NVL(NSR_MAGAZ,-1) ... 我也尝试过类似的东西(
... WHERE NSR_DATCRE BETWEEN to_date(:NUMDAYS1, 'DD.MM.RRRR')
AND to_date(:NUMDAYS2, 'DD.MM.RRRR')
AND
CASE WHEN :STATUS = null then NSR_STATUS != 1
else NSR_STATUS = :STATUS
AND NVL(NSR_MAGAZ,-1) ...
我也尝试过类似的东西(从这里你可能会更好地了解我在这里要归档的内容)
我现在真的被卡住了。有什么建议吗?除了尼克的评论,在混合和&或时也要使用括号 或的优先级低于和,如果不使用括号,则始终最后处理
... WHERE NSR_DATCRE BETWEEN to_date(:NUMDAYS1, 'DD.MM.RRRR') AND to_date(:NUMDAYS2, 'DD.MM.RRRR')
AND (
(NSR_STATUS = :STATUS AND :STATUS is not null)
or (NSR_STATUS != 1 AND :STATUS is null)
)
AND NVL(NSR_MAGAZ,-1) = ?? ...
您的CASE语句无效,因为CASE无法返回布尔条件(
1=1
,NSR_STATUS!=1
,等等)。除了Nick的注释外,在混合和和&或时也使用括号
或的优先级低于和,如果不使用括号,则始终最后处理
... WHERE NSR_DATCRE BETWEEN to_date(:NUMDAYS1, 'DD.MM.RRRR') AND to_date(:NUMDAYS2, 'DD.MM.RRRR')
AND (
(NSR_STATUS = :STATUS AND :STATUS is not null)
or (NSR_STATUS != 1 AND :STATUS is null)
)
AND NVL(NSR_MAGAZ,-1) = ?? ...
您的CASE语句无效,因为CASE无法返回布尔条件(
1=1
,NSR_STATUS!=1
,等等)。CASE表达式应返回值,而不是逻辑表达式:
... WHERE NSR_DATCRE BETWEEN to_date(:NUMDAYS1, 'DD.MM.RRRR') AND
to_date(:NUMDAYS2, 'DD.MM.RRRR') AND
1 = CASE
WHEN :STATUS IS NULL AND NSR_STATUS != 1 THEN 1
WHEN NSR_STATUS = :STATUS THEN 1
ELSE 0
END AND
NVL(NSR_MAGAZ,-1) ...
大小写表达式应返回值,而不是逻辑表达式:
... WHERE NSR_DATCRE BETWEEN to_date(:NUMDAYS1, 'DD.MM.RRRR') AND
to_date(:NUMDAYS2, 'DD.MM.RRRR') AND
1 = CASE
WHEN :STATUS IS NULL AND NSR_STATUS != 1 THEN 1
WHEN NSR_STATUS = :STATUS THEN 1
ELSE 0
END AND
NVL(NSR_MAGAZ,-1) ...
:状态为空或:状态不为空:STATUS=null将始终计算为FALSE。现在它仅在:STATUS不为null时工作。第二个“OR”语句未被引用,但:为什么要将日期值作为字符串传递?这是针对oracle报表的。使用string命令从java调用它更容易:STATUS为null或:STATUS为NOT null.:STATUS=null将始终计算为FALSE。现在它仅在:STATUS不为null时工作。第二个“OR”语句未被引用,但:为什么要将日期值作为字符串传递?这是针对oracle报表的。使用string命令从java调用它更容易