如何使用sql在哪里查询分割列值和检查值?

时间:2016-03-16 04:01:56

标签: sql sql-server-2008 split

我需要检查列中的一个值是否有分号分隔值,但我不想使用类似查询而是通过拆分有任何选项并检查列值

我的表就像

ID      Values
1    RCI Argentine;Brazil;RCM Poland
2    Brazil;Germany
3    Australia; Poland
4    RCM Poland;Germany
5    RCI Argentine;Brazil;Germany;Italy

我的要求我需要检查此表中存在的值“Poland”,当我使用like query时它会提取此输出

ID      Values
1    RCI Argentine;Brazil;RCM Poland
3    Australia; Poland
4    RCM Poland;Germany

但我的实际输出应该是

ID      Values
3    Australia; Poland

如果我的值为“RCM Poland”,则应为

ID      Values
1    RCI Argentine;Brazil;RCM Poland
4    RCM Poland;Germany

是否还有其他选项可以拆分和检查列?

3 个答案:

答案 0 :(得分:0)

首先,您绝不应在违反 First Normal form的列中存储多个值。

使用分隔符存储多个值使得解析数据非常困难,就像您的情况一样。因此,请考虑更改数据库设计。

要使用当前表结构回答您的问题,您需要一个拆分字符串函数(不推荐)

SELECT [ID],
       [Values]
FROM   yourtable
       CROSS apply (SELECT *
                    FROM   Splitstrings([values], ';')) cs
WHERE  cs.SPLIT_VAL = ' Poland' 

以下是有关拆分字符串函数 Split strings the right way – or the next best way

的文章

答案 1 :(得分:0)

您可以存储以下字段:;;澳大利亚;波兰; 和'%;波兰;%'这样的价值 如果您不喜欢这样,请使用MotoGP的解决方案:v

答案 2 :(得分:0)

你应该试试这个:

select * from yourtbl where ';'+[values]+';' like '%;yourval;%'