案例声明在sql server 2014中的clase

时间:2017-03-05 18:28:18

标签: sql-server tsql

我正在创建一个商店程序,我遇到了问题。我想根据条件查询两列。如果参数是数字,则查询一列,如果它是非数字,则查询其他列。以下是程序。

operator new(...)

请帮我解决这个问题

3 个答案:

答案 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+'%')