如何从逗号值中获取行值

时间:2019-10-30 11:33:44

标签: sql sql-server-2008 split

下面是我的表格XYZ数据

Sno  ProgramID    ProgramName
 1      1,2          CCE
 2      3,11         DDU

我希望输出如下,通过programID 1

Sno  ProgramID    ProgramName

 1      1,2          CCE

我正在尝试如下查询

select * from XYZ  where ProgramID in('1')

以上查询没有结果,我的问题是查询中的单值匹配。我不希望查询匹配具有准确的值

2 个答案:

答案 0 :(得分:2)

您的数据模型已损坏。您可以使用LIKE做您想做的事情:

select *
from XYZ 
where ',' + ProgramID + ',' like '%,1,%';

也就是说,您应该理解为什么在字符串中存储多个值是错误

  • 数字应存储为数字,而不是字符串。
  • id应该具有正确声明的外键引用,而字符串不能这样做。
  • SQL的字符串处理能力很差。
  • 查询无法使用索引和分区,并且可能会使优化器混乱。
  • 维护字符串以避免重复是很棘手的。
  • SQL具有用于存储列表的 great 数据类型。它称为,而不是字符串

答案 1 :(得分:2)

您可以使用:

 Select *  from XYZ  WHERE (',' + Rtrim(ProgramID) + ',') LIKE '%,1,%'

使用TRIM消除字符串开头和结尾的空格。