【问题标题】:SQL condition CASE in WHERE statement 'THEN NULL'WHERE 语句中的 SQL 条件 CASE 'THEN NULL'
【发布时间】:2018-10-09 07:04:41
【问题描述】:

如果“column_task”具有特定值,我尝试替换“operation_num”中的值。但我找不到合适的说法。你能帮帮我吗?

仅供参考:“操作编号”列不包含任何 NULL 值。

WHERE
  CASE operation_num WHEN column_task = 'EXERCISE' THEN operation_num is null
                     ELSE operation_num -- operation_num = operation_num
  END

谢谢

【问题讨论】:

  • 要求不清楚,至少对我来说是这样。您能否分享一些示例数据以及您试图为此示例获得的结果?
  • operation_num - 10,20, 30... column_task - 'EXERCISE', 'RUNNING'...
  • 一般来说,在 WHERE 子句中使用 AND/OR 结构而不是 case 表达式要好得多。

标签: sql null case where


【解决方案1】:

试试这个

WHERE
  CASE WHEN column_task = 'EXERCISE' THEN null
                     ELSE operation_num
  END

【讨论】:

  • 我仍然看到:ORA-00905: 缺少关键字 00905. 00000 - “缺少关键字” ...我也尝试过 .. THEN REPLACE(operation_null, null) 但它不起作用...
  • 修改了你现在可以查看的答案
【解决方案2】:

我觉得应该像下面这样

WHERE
  (CASE column_task WHEN 'EXERCISE' THEN  null
                     ELSE operation_num end)= value

【讨论】:

    【解决方案3】:

    将其转换为AND/OR(也会有更好的性能):

    WHERE (column_task = 'EXERCISE' and operation IS NULL)
        OR operation_num
    

    虽然我不明白最后一个条件。

    【讨论】:

      【解决方案4】:

      对于我的错误问题,我深表歉意。我终于在查询中的“SELECT”部分解决了我的问题:

      select 
        (case when (to_char(operation_num) = '10' and column_task = 'EXERCISE')
        then REPLACE(to_char(operation_num),'10',' ')
        else to_char(operation__num)
        end) as "column"
        ,column_task
      from  my_table
      

      但感谢大家的努力。

      【讨论】:

        【解决方案5】:

        我想你打算:

        WHERE column_task <> 'EXERCISE' OR operation_num IS NULL)
        

        【讨论】:

          【解决方案6】:
          SELECT distinct ID,
                 CASE
                    WHEN COLUMN2 is not NULL then COLUM1||'#'|| COLUMN2
                     
                    ELSE COLUMN1
                 END
          FROM   table ;
          

          此查询显示结果为 column1# 这是错误的,当它为空时,它应该显示列值

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-08-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-05
            • 2020-03-26
            • 1970-01-01
            相关资源
            最近更新 更多