你真的不应该如果您的 SQL 想要单独处理多个项目,请将它们存储在一列中。在这些情况下,您必须执行的“SQL 体操”既是丑陋的黑客行为,又会降低性能。
理想的解决方案是将各个项目拆分为单独的列,并且对于 3NF,如果您需要将这些列作为行移动到单独的表中really想要正确地做到这一点(但是,如果您确定在中短期内不会有两个以上的原因,那么婴儿步骤可能是可以的)。
那么您的查询将变得更简单、更快。
但是,如果这不是一个选择,您可以使用上述 SQL 操作来执行以下操作:
where find ( ',' |fld| ',', ',02,' ) > 0
假设您的 SQL 方言具有字符串搜索功能(find
在这种情况下,但我认为charindex
对于 SQLServer)。
这将确保所有子列都以逗号开头(逗号加字段加逗号),并查找特定的所需值(两侧都有逗号以确保它是完整的子列匹配)。
If you can't控制应用程序在该列中放置的内容,我会选择 DBA 解决方案 - DBA 解决方案被定义为 DBA 必须做的工作来解决用户的不足之处:-)。
在该表中创建两个新列,并创建一个插入/更新触发器,该触发器将用用户放入原始列中的两个原因填充它们。
然后查询这两个new特定值的列,而不是尝试拆分旧列。
这意味着拆分的成本仅在行插入/更新上,而不是在_每个单个选择上,从而有效地摊销该成本。
不过,我的答案是重新设计架构。从长远来看,这将是速度、可读查询和可维护性方面的最佳方式。