'的替代方案;CharIndex&x27;在SQL中

'的替代方案;CharIndex&x27;在SQL中,sql,Sql,我有一个sql表,其中一列“code”由多个字符值组成,这些字符值由“|”表示 (例如:| 0000000171 | 0000001192 | 0000003498 | 0000003569 |) 现在,在一个查询中,为了检查列“代码”中是否存在单个值,如果使用以下命令,将成功返回一行:- charindex('0000000171', Codes) > 0 问题:-如果我想,SQL中的正确查询是什么 如果“代码”列中存在多个值,则搜索多个值 例如,如果需要搜索“代码”列中是否存在三个值

我有一个sql表,其中一列“code”由多个字符值组成,这些字符值由“|”表示

(例如:| 0000000171 | 0000001192 | 0000003498 | 0000003569 |)

现在,在一个查询中,为了检查列“代码”中是否存在单个值,如果使用以下命令,将成功返回一行:-

charindex('0000000171', Codes) > 0
问题:-如果我想,SQL中的正确查询是什么 如果“代码”列中存在多个值,则搜索多个值

例如,如果需要搜索“代码”列中是否存在三个值0000000 171、0000000 172、0000000 173,则以下语法不返回任何内容:-

charindex('0000000171,0000000172,0000000173', Codes) > 0
请告知……

关于:

(charindex('0000000171', Codes) > 0
or
charindex('0000000172', Codes) > 0
or
charindex('0000000173', Codes) > 0)

您可以使用
charindex
三次

charindex('0000000171', Codes) > 0 or
charindex('0000000172', Codes) > 0 or
charindex('0000000173', Codes) > 0

如果需要使用带分隔符的列表,则charindex应在每个代码上包含带分隔符的列表,如所示:

charindex('|'+'0000000171'+'|', Codes) > 0

无论是谁设计了“Codes”字段,似乎都考虑到了这一点,因为它以分隔符开始和结束


但是,正确的解决方案是将代码存储在一个单独的表中。

Yes aF。。我已经考虑过这个解决方案,这是我最后的选择。请告诉我是否还有其他较短的替代方案,因为您必须解决糟糕的设计问题(即,正如Gordon Linoff提到的,代码应该存储在单独的表中)。这就是为什么(可能)没有更简单的解决办法。@MichaelTodd-你是对的。注意并理解这一点。Thnx:)修复数据库结构,将代码存储在单独的表中。存储在文本字段中的已删除列表是需要重新访问表结构的一个好迹象。Mikael-您能推荐其他更短的替代方案吗。您建议的解决方案以及aF的解决方案确实是实现目标的正确方法。我想知道是否有任何内置功能。使用类似的
将缩短28个字符<代码>像“%0000000 171%”这样的代码或像“%0000000 172%”这样的代码或像“%0000000 173%”这样的代码。
我不知道有任何内置函数可以为您执行此操作。是的,我明白了。提供的答案是唯一正确的答案。唯一正确的选择是重新设计表结构,这是一项艰巨的任务:P。无论如何,非常感谢。是的,那将是最好的选择。戈登-非常感谢你提出了可能的选择和理由。我将使用这里提供的基本答案。剩下的就是重新设计桌子的结构。我明白。我不止一次地在分隔列表中存储东西。然而,你看到了这条路的走向,它通常并不漂亮。
charindex('|0000000171|', Codes) > 0