假设我们在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语法的帮助。谢谢!
答案 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代码中。在您的情况下,这意味着在模式和值之间存储映射,类似于:
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