SQL:多个IF检查相同的变量

时间:2016-05-03 20:12:54

标签: if-statement sql-server-2008-r2

假设我们在SQL语句中有两个变量。

@myVar1 VARCHAR(100) = 'I ate an apple for lunch'
@myVar2 INT

现在,我想要以下逻辑:

IF @myVar1 like '%apple%' THEN @myVar2 = 1
IF @myVar1 like '%orange%' THEN @myVar2 = 2
IF @myVar1 like '%banana%' THEN @myVar2 = 3
IF @myVar1 like '%kiwi%' THEN @myVar2 = 4
IF @myVar1 like '%pineapple%' THEN @myVar2 = 5

这不在任何select语句之内。我只需要检查一个传入的字符串,并根据预期的子字符串设置一个整数。 @ myVar1会有一个有限的可能值列表,它们都是已知的。

我只需要有关T-SQL语法的帮助。谢谢!

5 个答案:

答案 0 :(得分:2)

使用CASE如下:

DECLARE @myVar1 VARCHAR(100) = 'I ate an apple for lunch'
DECLARE @myVar2 INT

SET @myVar2 = 
    CASE 
        WHEN @myVar1 LIKE '%apple%'     THEN 1
        WHEN @myVar1 LIKE '%orange%'    THEN 2
        WHEN @myVar1 LIKE '%banana%'    THEN 3
        WHEN @myVar1 LIKE '%kiwi%'      THEN 4
        WHEN @myVar1 LIKE '%pineapple%' THEN 5
    END

答案 1 :(得分:1)

创建一个表格,其中模式为键,整数值为另一列。然后你可以写

SELECT @MyVar2 = IntCol
  FROM TheTable
 WHERE @MyVar1 LIKE PatternCol

现在您可以管理表格内容而不必编辑代码。

答案 2 :(得分:0)

建议将数据存储到表中,而不是存储在SQL代码中。在您的情况下,这意味着在模式和值之间存储映射,类似于:

FruitValue

FruitValueId INT IDENTITY(1, 1),
Token VARCHAR(32),
Value INT

插入的值应如下所示:

('apple',1),('orange',2)依此类推

从您的示例中,不清楚如果多个水果出现在一个句子中会发生什么,但对于每个句子一个水果的简单示例,可以使用以下查询(适应实际使用的SQL风格):

SELECT TOP 1 @myVar2 = Value
FROM FruitValue 
WHERE @myVar1 LIKE '%' + Token + '%'

答案 3 :(得分:0)

目录表怎么样?

CREATE TABLE Fruits(ID INT IDENTITY, FruitName VARCHAR(100));
INSERT INTO Fruits VALUES
 ('Apple'),('Orange'),('Banana'),('Kiwi'),('Pineapple');

DECLARE @myVar1 VARCHAR(100)='I ate an apple for lunch';
DECLARE @myVar2 INT=(SELECT ID FROM Fruits WHERE @myVar1 LIKE '%' + FruitName + '%');

SELECT @myVar2;

--If there might be more than one:
SELECT *
FROM Fruits
WHERE @myVar1 LIKE '%' + FruitName + '%';

DROP TABLE Fruits

答案 4 :(得分:0)

你也可以试试这个

declare 
@myVar1 VARCHAR(100) = 'I ate an apple for lunch',
@myVar2 INT


IF @myVar1 like '%apple%' set @myVar2 = 1 else 
IF @myVar1 like '%orange%' set @myVar2 = 2 else
IF @myVar1 like '%banana%' set @myVar2 = 3 else
IF @myVar1 like '%kiwi%' set @myVar2 = 4 else
IF @myVar1 like '%pineapple%' set @myVar2 = 5



select @myVar2