Sql server SQL Server-如何使用case语句替换where子句中的if

Sql server SQL Server-如何使用case语句替换where子句中的if,sql-server,if-statement,case,where-clause,Sql Server,If Statement,Case,Where Clause,这是我的密码。我需要找到一种方法来复制这个if行的功能。 基本上,对于我的一个代码,我只需要选择它,如果它的长度是11,那么该代码的一些旧数据的数字长度是10,不能使用 SELECT * FROM ( SELECT cast(Left( ZIP, 5) as VARCHAR) as ZIP, cast(NUMBER as VARCHAR) as NUMBER, cast( ROW_NUMBER() OVER(PARTITION BY CODE ORDER BY NEWID() ASC) a

这是我的密码。我需要找到一种方法来复制这个if行的功能。 基本上,对于我的一个代码,我只需要选择它,如果它的长度是11,那么该代码的一些旧数据的数字长度是10,不能使用

SELECT * FROM 
( SELECT  cast(Left( ZIP, 5) as VARCHAR) as ZIP, 
cast(NUMBER as VARCHAR) as NUMBER,
cast( ROW_NUMBER() OVER(PARTITION BY CODE ORDER BY NEWID() ASC) as VARCHAR) rn 
FROM tbl_MyTable 
WHERE EMAIL is null 
AND CODE is not NULL 
AND CODE != '' 
AND NUMBER not like '%?%' 
AND Date < '1/20/15' 

****AND IF CODE = 'THIS' len(NUMBER) = 11****       

AND ZIP != '43830' ) a WHERE rn = 1
相反,您可能更容易理解,但请注意,这会将空代码处理为false,因此并非完全相反

AND CASE WHEN CODE <> 'THIS' OR LEN(NUMBER) = 11 THEN 1 ELSE 0 END = 1
如果代码为“THIS”或lenNUMBER11,那么您想做什么
AND CASE WHEN CODE <> 'THIS' OR LEN(NUMBER) = 11 THEN 1 ELSE 0 END = 1