【问题标题】:How get data in split string data for SQL Server [closed]如何获取 SQL Server 的拆分字符串数据中的数据 [关闭]
【发布时间】:2014-09-10 03:18:13
【问题描述】:

表格数据是

1-"A11111,B22222,C33333,D44444,B22222"
2-"A11111,C33333,D44444,B22222,D44444"
3-"A11111,E55555,C33333,D44444,B22222"

如果会使用

select * 
from table 
where data = 'E55555'

可以获得3号数据

谢谢

【问题讨论】:

  • 请通过提供详细的样本数据和结果集来阐明您的要求。谢谢!

标签: sql-server


【解决方案1】:

还有一个变种

SELECT * FROM [table] WHERE ','+[data]+',' LIKE '%,E55555,%'

但问题在于,您所要求的将无法使用普通索引,这意味着每次查询时都会进行低效的表扫描。您可能需要考虑将逗号分隔的值分解为它们自己的列,以便您可以有效地查询它们。实际上,您有一个“超级”列,可将多条数据塞进一个列中。

【讨论】:

  • 嗨,请参考 sqlfiddle.com/#!6/f2469/7.. 替代 1 似乎更快。
  • mm,所以我将数据格式保存为,xxxxx,?
  • @HaoHan - 我不明白你在评论中问什么。
  • @hatchet:参考小提琴:sqlfiddle.com/#!6/817e4/1.. E5 不返回。请修改 fiddle 并在 cmets 中分享链接。
  • @NishanthiGrashia - 我看你的不够仔细。是的,他们应该给出相同的结果。但是,我认为只有几行的 sqlfiddle 不足以断定哪个更快。在一张普通大小的桌子上,我猜你和我的速度会差不多。在您设置的 sqlfiddle 中,有时一个更快,有时另一个更快。任何实际差异都不会超出噪音。两种情况下的计划都是一样的:表扫描。
【解决方案2】:

试试这个:

SELECT * FROM [table] WHERE [data] LIKE '%E55555%'

【讨论】:

  • 呃...但我想要一个准确的比较
【解决方案3】:

此查询将帮助您处理逗号分隔的数据搜索:

SELECT * FROM [table] WHERE 
[data] ='E55555' OR         -- IF record contains only this value
[data] LIKE 'E55555,%' OR   -- If record starts with the value followed by comma and others
[data] LIKE '%,E55555' OR   -- If record ends with the value preceeded by comma and others
[data] LIKE '%,E55555,%'    -- If record contains the value in middle

参考SQL Fiddle here

【讨论】:

  • 如果有'E555'和'E55555',结果不准确
  • 如果你有 E555 AND E55555,只会返回 E55555,我猜这就是你想要的。你的要求到底是什么?
  • 但是如果 E555,E555 和 E55555 会被返回?
  • 我将得到 E555 返回 E555,如果 1-"A11111,C33333,D44444,B22222,D44444" 不返回 2-"A11111,E55555,C33333,D44444,B255555" 则得到 E55555 返回 E55555返回,E555 不返回 3-"E555,E55555,C33333,D44444,B22222" 得到 E555 或 E55555 返回
  • E 开头的都应该返回...这是你的要求吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多