我对SQL很陌生,希望有人可以帮助我。
我有一个存储过程,我希望根据列是否包含某个国家/地区来传递不同的值。
到目前为止,我在检查具有特定数字或值的匹配时仅使用CASE
,所以我不确定这个。
有人可以告诉我以下是否有效和正确或让我知道如何正确地写这个(只是关于括号中的部分)?
(CASE countries
WHEN LIKE '%'+@selCountry+'%' THEN 'national'
ELSE 'regional') AS validity
注意: @selCountry是国家/地区的变量名称,国家/地区可以为空,一个国家/地区或多个国家/地区以逗号和空格分隔。 基本上我只想检查国家是否包含@selCountry,如果是,则将有效性设置为'national'。
答案 0 :(得分:29)
这是您需要的语法:
CASE WHEN countries LIKE '%'+@selCountry+'%' THEN 'national' ELSE 'regional' END
虽然,根据你原来的问题,我会以不同的方式解决它,将@selcountry的内容拆分为表格并加入它。
答案 1 :(得分:1)
最后在别名之前添加END
。
CASE WHEN countries LIKE '%'+@selCountry+'%'
THEN 'national' ELSE 'regional'
END AS validity
例如:
SELECT CASE WHEN countries LIKE '%'+@selCountry+'%'
THEN 'national' ELSE 'regional'
END AS validity
FROM TableName
答案 2 :(得分:1)
您也可以这样
select *
from table
where columnName like '%' + case when @varColumn is null then '' else @varColumn end + ' %'
答案 3 :(得分:0)
SELECT Lname, Cods, CASE WHEN Lname LIKE '% HN%' THEN SUBSTRING(Lname,
CHARINDEX(' ', Lname) - 50, 50) WHEN Lname LIKE 'HN%' THEN Lname ELSE
Lname END AS LnameTrue FROM dbo.____Fname_Lname
答案 4 :(得分:-5)
您需要了解的关于SQL(和关系数据库)的第一件事是,您不应该在一个字段中存储多个值。
您应该创建另一个表并每行存储一个值。
这将使您的查询更容易,并且您的数据库结构更好。
select
case when exists (select countryname from itemcountries where yourtable.id=itemcountries.id and countryname = @country) then 'national' else 'regional' end
from yourtable