小编典典

如何检查存储在varchar列中的逗号分隔列表中是否包含数字?

sql

我有一张桌子有一varcharcategoryIds。它包含一些用逗号分隔的ID,例如:

id       categoryIds
-------------------- 
1        3,7,12,33,43

我想执行一条select语句,并检查该列中是否存在int。像这样的东西:

select * 
from myTable 
where 3 in (categoryIds)

我知道这是可能在MySQL做这个,但它可以在SQL Server来完成呢?

我尝试将int转换为char,该char运行以下语句:

select * 
from myTable 
where '3' in (categoryIds)

但这似乎不支持以逗号分隔的列表,因为它什么也不返回。


阅读 216

收藏
2021-03-23

共1个答案

小编典典

您实际上应该重新设计该表,以将这些值从逗号分隔成单独的行中分离出来。但是,如果这不可能,那么您将不得不进行字符串比较:

DECLARE @id INT = 3
DECLARE @stringId VARCHAR(50) = CAST(@id AS VARCHAR(50))

SELECT * 
FROM MyTable 
WHERE categoryIds = @stringId -- When there is only 1 id in the table
OR categoryIds LIKE @stringId + ',%' -- When the id is the first one
OR categoryIds LIKE '%,' + @stringId + ',%' -- When the id is in the middle
OR categoryIds LIKE '%,' + @stringId -- When the id is at the end
2021-03-23