【问题标题】:Case statement for 'where [value] is not null''where [value] is not null' 的 case 语句
【发布时间】:2015-07-14 23:22:41
【问题描述】:

我见过很多这样的问题,其中有人在 case 语句中测试 NULL 值,但与这个问题的性质无关。我希望 case 语句的返回是 where 子句的“非空”表达式。

这就是我所拥有的:

INSERT INTO table1 (Id) (
     SELECT DISTINCT AId AS Id
     FROM table2 As t2
     INNER JOIN table3
     ON (
     ...
     )
     WHERE CASE
          WHEN test_value <> '' THEN (another_value IS NOT NULL) 
     END
)

这给出了错误:

关键字“is”附近的语法不正确。

简而言之,如果测试值不是空字符串,那么我不希望 table1 中有 another_value=NULL 的行。

我的程序需要通过2个案例

Case 1:
Row#     test_value     another_value    ....
1        'tst'          '919'
2        'tst'           NULL
ONLY ROW ONE SHOULD BE INSERTED

Case 2:
Row#     test_value     another_value    ....
1        ''             '919'
2        ''              NULL
BOTH ROWS SHOULD BE INSERTED

【问题讨论】:

    标签: sql null case where


    【解决方案1】:

    试试这个:

    WHERE ((isnull(test_value,'') <> '' and ISNULL(another_value,'') <> '') OR ISNULL(test_value,'') = '')
    

    【讨论】:

    • 底部示例在 test_value != '' 时有效,但在 test_value = '' 时失败(过滤掉所有内容)。
    • @matrumz,进行了更新。所以基本上,如果该行的 test_value 有一个值,那么该行的 another_value 也必须有一个值。如果该行的 test_value 没有值,那么 another_value 有什么值并不重要?
    • 我会运行这个。请参阅更新后的问题以了解案例和结果。
    【解决方案2】:

    你可以这样做:

    WHERE CASE
            WHEN test_value <> '' AND another_value IS NOT NULL THEN another_value  
          END
    

    【讨论】:

    • 返回错误:“在预期条件的上下文中指定的非布尔类型的表达式”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    相关资源
    最近更新 更多