我正在编写一个sql查询,但是它有效,但我得到的结果只有一半:
(q1.VariableName LIKE
CASE WHEN @Variablename IS NULL THEN ('e%')
ELSE @Variablename
END)
我想要的是: 如果@Variablename为NOT NULL,则q1.VariableName = @Variablename。
If it is NULL,
then q1.VariableName like 'e%'
or q1.VariableName like 'b%' and q1.VARIABLENAME not LIKE '%MAIL%'
但是,我无法得到它。谁能告诉我,我哪里出错了。
答案 0 :(得分:2)
您可以使用isnull()函数检查NULL。如果@VariableName为NULL,则该函数将用'e%'替换它。
WHERE q1.VariableName LIKE isnull(@VariableName, 'e%')
如果它不是NULL,则必须等于q1.VariableName,前提是@VariableName不包含通配符。
答案 1 :(得分:1)
OR可以在where子句中使用
where ( q1.VariableName = @Variablename)
OR ( @VariableName IS NULL And (q1.VariableName like 'e%'
or q1.VariableName like 'b%' and q1.VARIABLENAME not LIKE '%MAIL%'))
答案 2 :(得分:0)
如果您这样做是where
条款,那么最好完全避免使用CASE
:
((@Variablename IS NULL
and (q1.VariableName LIKE 'e%'
or q1.VariableName like 'b%'
and q1.VARIABLENAME not LIKE '%MAIL%'))
or q1.VariableName = @Variablename)
由于null
永远不等于任何内容,q1.VariableName = @Variablename)
@Variablename
null
时,{{1}}总是会评为假。