【问题标题】:Column is null using Case When SQL使用Case When SQL,列为空
【发布时间】:2017-07-18 15:03:24
【问题描述】:

我正在使用 SQL Developer

我需要接受用户输入为 Y 或 N。

如果输入了 N,我需要将其转换为 null。如果输入 Y,则应保持 Y。然后,脚本需要根据用户输入的内容搜索具有空值或 Y 值的列。

我有下面的代码以及如何解决它的好主意

接受 WITHDRAWN 字符提示'请输入 Y 或 N)'

SELECT *
FROM table1
WHERE column1 = case when '&WITHDRAWN' = 'N' then null else '&WITHDRAWN' end;  

正如您可能知道的那样,它不起作用,至于为空的列,'=' 符号需要是'is'。同样,如果列为“Y”,则符号需要为“=”。

我真的想不出一种方法来用 N 代替 null 的值并允许 column1 与之匹配。有没有可能?

【问题讨论】:

  • 用 column1 代替用户输入。 case when column1 is null then 'N' else 'Y' end =&withdrawn 或简单地使用合并。 coalesce(column1,'N') = &withdrawn

标签: sql case substitution case-when


【解决方案1】:

我会合并 column1 的值,因此当它为 Null 时,会替换 N 并与用户输入进行比较。

SELECT *
FROM table1
WHERE coalsece(column1,'N') = &WITHDRAWN;  

假设在 table1 中所有为 null 的 column1 实际上都是“N”,因此合并只允许我们进行字符与字符的比较。

还要注意 column1 上的索引将被忽略,因为我们必须使用函数来获取返回的 'N' 值。

【讨论】:

  • 每当您使用这样的功能时,都会警告索引如果存在则可能无法使用。
【解决方案2】:

你根本不需要案例:

SELECT *
FROM Table1
WHERE 
(
    '&WITHDRAWN' = 'N'
    AND Column1 IS NULL 
)
OR Column1 = 'Y'

【讨论】:

    【解决方案3】:
    select * from table1 
    where (
        (column1 = '&WITHDRAWN' and '&WITHDRAWN' != 'N') 
      or 
        (column1 is null        and '&WITHDRAWN' = 'N'))
    

    希望对您有所帮助!

    【讨论】:

      【解决方案4】:
         SELECT * FROM table1 
         WHERE (
             (column1 = '&&WITHDRAWN' AND '&&WITHDRAWN' = 'Y') 
          OR 
             (column1 IS NULL         AND '&&WITHDRAWN' = 'N'))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-31
        • 2020-11-29
        • 1970-01-01
        • 1970-01-01
        • 2017-05-30
        • 1970-01-01
        相关资源
        最近更新 更多