我需要检查列中的一个值是否有分号分隔值,但我不想使用类似查询而是通过拆分有任何选项并检查列值
我的表就像
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
是否还有其他选项可以拆分和检查列?
答案 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;%'