我的数据库中有一个逗号分隔的字符串(类别)列,如下所示:
|-------------------|------------------|
| Id | Category |
|-------------------|------------------|
| 1850 | 10,11 |
|-------------------|------------------|
| 1851 | 1,2,3 |
|-------------------|------------------|
我正在传递一个逗号分隔的字符串(例如1,11),以如下所示从该表中进行搜索,但这并没有给我传递多个值的结果:
Declare @SearchTerm NVARCHAR(4000) = '11'
Select Id,ImageCategory from AppImage
WHERE (',' + RTRIM(ImageCategory) + ',') LIKE '%,' + @SearchTerm + ',%'
如果我仅传递一个像1或11这样的值,那么它将给出结果。如何传递多个并获得结果。该表中有50万条记录和20列,所以我也需要提高速度。
答案 0 :(得分:1)
修复您的数据模型!在字符串中存储多个整数只是错误,错误,错误:
有时候我们会被别人的错误决定所困扰。
您可以解决此问题。 SQL Server提供了string_split()
:
with input as (
select value
from string_split(@SearchTerm, ',')
)
select ai.*
from AppImage ai
exists (select 1
from string_split(ai.category)
where value in (select i.value from input i)
);
答案 1 :(得分:0)
尝试以下操作:
Declare @SearchTerm NVARCHAR(4000) = '1,11'
declare @SearchTerm1 NVARCHAR(10)
declare @SearchTerm2 NVARCHAR(10)
set @SearchTerm1=left(@SearchTerm, charindex(',', @SearchTerm) - 1)
set @SearchTerm2=right(@SearchTerm, charindex(',', @SearchTerm))
Select Id,ImageCategory from AppImage
WHERE RTRIM(ImageCategory) LIKE '%' + @SearchTerm1 + '%' or RTRIM(ImageCategory) like '%' + @SearchTerm2 + '%'