这是我的查询。@ ScoreCount可能包含零或不包含。如果它包含零,则应考虑零,以及空和空字符。如何做?
declare @ScoreCount
set @ScoreCount = '2,5,0'
select * from tblEmployee where ScoreCount in (@ScoreCount)
答案 0 :(得分:1)
在我为您的问题提供可能的解决方案之前,我必须重申其他人已经提出的几点:
所以无论如何,假设你正在创建一个存储过程,这里有几个解决方案:
如果你从.Net调用proc,这很好,但是其他环境可能不支持表类型参数,在这种情况下你可以执行以下操作:
/* Example values - assume @ScoreCount will ultimately be passed in from caller */
declare @ScoreCount varchar(200)
set @ScoreCount = '2,5,0'
/* */
/* 1. Treat null and empty values as zero */
if IsNull(@ScoreCount, '') = '' SET @ScoreCount = '0'
/* 2. Ensure @ScoreCount starts and ends with comma */
SET @ScoreCount = ',' + @ScoreCount + ','
select * from tblEmployee where @ScoreCount LIKE '%,' + Convert(varchar, ScoreCount) + ',%'
这样做是比较表中的每个ScoreCount值,看它是否像逗号分隔列表一样。例如对于它将执行的每一行:
select * from tblEmployee where ',2,5,0,' LIKE '%,2,%' -- True, return this row
select * from tblEmployee where ',2,5,0,' LIKE '%,42,%' -- false, do not return this row
select * from tblEmployee where ',2,5,0,' LIKE '%,0,%' -- True, return this row
... etc for each row.
请注意,评论" 2"我们在@ScoreCount之前添加和附加逗号,以确保只匹配整数,因为我们将这些数字作为字符串进行比较。
另请注意,这不是一个有效的查询,因此对于大型表来说速度不快!
答案 1 :(得分:0)
首先,您需要使用int值解析变量@ScoreCount
,例如在某个临时表中,然后使用临时表从tblEmployee
进行选择。
答案 2 :(得分:0)
首先你的询问是这样问:
select * from tblEmployee where ScoreCount in ('2,5,0');
因此只找到ScoreCount与这一个字符串匹配的记录(与ScoreCount = '2,5,0'
相同)。
然后,ScoreCount包含字符串(你说varchar(200)
)很奇怪。那么你期望在那个领域做什么?像这样的字符串:'2','5','0','',null,'two','more then 4'?对我而言,您似乎使用了错误的数据类型,这就是您现在遇到问题的原因。
但是,为了找到'2','5','0','',null,'2'和'5',请使用:
select * from tblEmployee where isnull(nullif(trim(ScoreCount), ''), 0) in (2, 5, 0);