我正在创建一个商店程序,我遇到了问题。我想根据条件查询两列。如果参数是数字,则查询一列,如果它是非数字,则查询其他列。以下是程序。
operator new(...)
请帮我解决这个问题
答案 0 :(得分:1)
为什么要使用单独的变量?你可以这样做:
[self.navigationItem.rightBarButtonItem.customView setHidden:YES];
我怀疑为什么要传递一个用于字符串和数字比较的值。如果我使用变量,我会这样做:
WHEN (person.people_id = try_convert(int, @peopleId) or
try_convert(int, @peopleId) is null and
person.first_name + ' ' + person.last_name LIKE '%' + @peopleId + '%'
)
代码似乎更容易理解。
答案 1 :(得分:0)
由于SQL Server不会将CASE表达式的结果视为布尔值,因此您必须添加额外的比较。这样做的方法是这样的:
WHERE 1 = CASE WHEN x THEN 1 WHEN y THEN 0 ELSE 1 END
导致行包含在结果中的条件必须求值为1,并且不要求的条件必须求值为1以外的值(如0)。因此整个CASE表达式返回0或1,并将其与1进行比较。
在您的代码中,它看起来像这样:
AND 1 = case
WHEN
@result='nonNumeric' then case when person.person_id = @peopleId then 1 else 0 end
else when person.first_name+' '+person.last_name LIKE '%'+@peopleId+'%' then 1 else 0 end
end
我添加了END。
答案 2 :(得分:-1)
就这样做
DECLARE @IsNumeric INT = NULL
DECLARE @IsNotNumeric INT = NULL
DECLARE @peopleId Varchar(50)
SET @peopleId = '123'
IF ISNUMERIC(@peopleId) = 1
BEGIN
SET @IsNumeric = 1
END
ELSE
BEGIN
SET @IsNotNumeric = 1
END
IN WHERE条件只需检查
AND (@IsNumeric IS NULL OR CONVERT(VARCHAR(500),person.people_id)=@peopleId)
AND (@IsNotNumeric IS NULL OR person.first_name+' '+ person.last_name LIKE '%'+@peopleId+'%')