'where [value] is not null' 的案例陈述
Case statement for 'where [value] is not null'
我见过很多 SO 问题,其中有人在 case 语句中测试 NULL 值,但与此问题的性质无关。我希望 case 语句的 return 成为 where 子句的 'is not null' 表达式。
这是我的:
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
)
这给出了错误:
Incorrect syntax near the keyword 'is'.
简而言之,如果测试值不是空字符串,那么我不希望 table1 中包含 another_value=NULL 的行。
我的程序需要通过2个case
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
你可以这样做:
WHERE CASE
WHEN test_value <> '' AND another_value IS NOT NULL THEN another_value
END
试试这个:
WHERE ((isnull(test_value,'') <> '' and ISNULL(another_value,'') <> '') OR ISNULL(test_value,'') = '')
我见过很多 SO 问题,其中有人在 case 语句中测试 NULL 值,但与此问题的性质无关。我希望 case 语句的 return 成为 where 子句的 'is not null' 表达式。
这是我的:
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
)
这给出了错误:
Incorrect syntax near the keyword 'is'.
简而言之,如果测试值不是空字符串,那么我不希望 table1 中包含 another_value=NULL 的行。
我的程序需要通过2个case
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
你可以这样做:
WHERE CASE
WHEN test_value <> '' AND another_value IS NOT NULL THEN another_value
END
试试这个:
WHERE ((isnull(test_value,'') <> '' and ISNULL(another_value,'') <> '') OR ISNULL(test_value,'') = '')