SQL开关/案例where子句中的值为NULL

时间:2018-10-17 13:07:24

标签: sql switch-statement case

我的问题与SQL Switch/Case in where clause非常相似。

我得到参数。如果期望 value 为NULL,则需要获取所有值,否则需要使用 value 进行过滤。

我正在尝试在SQL中执行此操作:

    WHERE param 
      CASE
       WHEN #{value} IS NULL THEN {IS NOT NULL}
       ELSE =#{value}
      END

我应该如何更正此SQL请求?

       WHERE param IS NOT NULL // all values if **value** is NULL
       WHERE param = #{value}  // i.e. value = 'data'

3 个答案:

答案 0 :(得分:0)

通常使用以下逻辑来完成此操作:

where #{value} is NULL or #{value} = param

我假设#{value}是要传入的值,而param是表中的某些列。

答案 1 :(得分:0)

如果我理解您,如果传递的参数为null,则返回该列不为null的所有行,如果该列具有值,则返回具有该值的行。 然后,您应该使用:

where param is NOT NULL OR param = #{value}

答案 2 :(得分:-1)

我遇到了类似的需求。找到了解决方案。多亏了一篇关于 https://use-the-index-luke.com/sql/where-clause/obfuscation/smart-logic

例如 声明@param 选择 * 来自blabla 其中(@param为null或blabla.bla_fld = @param)