2014-12-02 96 views
0

我想比较SQL中的两个字符串列表,一个是保存在数据库中,另一个是输入参数。如何比较SQL中的2个字符串列表

所以后台当前SQL状态

SELECT * FROM Vans WHERE Code = $accountcode 

其中$代码是一个输入参数,如 '一,二,三'

货车的一个例子是

Description, Code, CreatedBy 
'VanA','one,two','Matt' 
'VanB','one,four','Matt' 
'VanC','four,five','Matt' 

不过,我现在需要编辑它以将表中代码字段中的任何项目与输入字符串中的任何项目进行匹配。这需要使用原始SQL或CTE(不是CLR)。

到目前为止,我已经创建了一个CTE拆分输入参数到表中“一”,“二”,“三化”等等 - 但我不知道下一步的匹配表中的字符串。我想我需要

SELECT * FROM Vans WHERE Code LIKE '%one%' OR Code LIKE '%two%' OR Code LIKE '%three%' 

但我不知道该如何到达那里。

所以上面我的代码的例子应该返回为VanA和VanB。

谢谢。

回答

0

存储事物列表是一个非常糟糕的主意。你可以用split函数来做你想做的事(只需谷歌“SQL Server拆分字符串”)。下面是一个方法:

SELECT * 
FROM Vans v CROSS APPLY 
    dbo.split(v.Code) as c(code) 
WHERE ','+$accountcode+',' like '%,' + c.code + ',%' 
+0

这将不匹配任一列表中的单个项目。 – 2014-12-02 12:25:33

+0

@MattB。 。 。我确定了答案,但是你有一个非常非常糟糕的数据格式。代码应该在单独的联结表中。 – 2014-12-02 12:28:51

+0

我同意,不幸的是我继承了它,现在无法更改它。 – 2014-12-02 12:30:45

0

我与自定义的CTE和通过固定选择与CROSS应用上面建议的固定它。