我试图比较SQL中的2个字符串列表,1个保存在DB中的字符串列表和一个输入参数的字符串列表。
因此,对于后台当前的SQL状态
SELECT * FROM Vans WHERE Code = $accountcode
其中$ code是输入参数,例如'one,two,three'
Vans的一个例子是
Description, Code, CreatedBy
'VanA','one,two','Matt'
'VanB','one,four','Matt'
'VanC','four,five','Matt'
但是我现在需要编辑它以将表格中代码字段中的任何项目与输入字符串中的任何项目相匹配。这需要仅使用原始SQL或CTE(而不是CLR)。
到目前为止,我已经创建了一个CTE来将输入参数拆分为表'one','two','three'等 - 但我不确定下一步要匹配表字符串。我想我需要
SELECT * FROM Vans WHERE Code LIKE '%one%' OR Code LIKE '%two%' OR Code LIKE '%three%'
但我不确定如何到达那里。
因此,对于上面的示例,我的代码应该返回VanA和VanB。
感谢。
答案 0 :(得分:0)
存储事物列表是一个非常糟糕的主意。您可以使用split
功能执行您想要的操作(只需谷歌" SQL Server拆分字符串")。这是一种方法:
SELECT *
FROM Vans v CROSS APPLY
dbo.split(v.Code) as c(code)
WHERE ','+$accountcode+',' like '%,' + c.code + ',%'
答案 1 :(得分:0)
我使用自定义CTE修复了它,并修复了上面提到的CROSS APPLY选项。