条件where语句和比较运算符

时间:2016-09-28 05:40:48

标签: sql oracle where where-clause

我试图减少我的sql where语句的大小以消除冗余条款"删除union语句。

我的陈述是这样的:

SELECT
   col1, col2, col3...etc
FROM
   someTabe
WHERE
   col1 = :param
   and :sType = 1
UNION
SELECT
   col1, col2, col3...etc
FROM
   someTabe
WHERE
   col1 like '%'||:param||'%'
   and :sType = 2

这个陈述的问题在于,对于每个:sType的可能性,我必须编写一个select语句并将所有可能性联合起来,在我的例子中,即使没有联合,我的sql语句也很长且很复杂< / p>

所以我试图将where语句重写为以下内容:

SELECT
   col1, col2, col3...etc
FROM
   someTabe
WHERE
   CASE WHEN :sType = 1 then col1= :param ELSE col1 like '%'||:param||'%' END

但是这无法运行,它需要在this question

之后的case语句之后运算符

那么,是否有一种语法可以实现上述陈述中的想法?

1 个答案:

答案 0 :(得分:2)

简单或可能就够了。

SELECT
   col1, col2, col3...etc
FROM
   someTabe
WHERE
   (:sType = 1 and col1 = :param )
or (:sType = 2 and col1 like '%'||:param||'%')

如何使用案例示例: Conditional WHERE clause with CASE statement in Oracle