【发布时间】:2019-08-23 17:02:19
【问题描述】:
如何在multivalued 列中查询特定键?
样本数据
ID DAY PRICE
1 01;02;03;04;... 100;230;110;34.5;...
2 01;02;03;04;... 120;240;510;34.5;...
例如:
选择 ... 其中 DAY 键 = '02'
预期:
ID DAY PRICE
1 02 230
2 02 240
备注
实际的表格有 30 多个字段。
加入多个 CROSS APPLY SPLIT_STRING 看起来像是一个乏味的解决方案
【问题讨论】:
-
如果是你的,2016+ 版本有一个名为
STRING_SPLIT的函数。 -
@BarbarosÖzhan 我试过了。您需要逐个字段重新构建源表,然后加入。实际的表有 30 多个字段......我希望有一种更聪明的方法来做到这一点
-
@CharlesOkwuagwu,最聪明的方法是将详细信息存储在单独的表中。如果无法重构 db,请使用
[DelimitedSplit8K_LEAD]sp 与STRING_SPLIT不同,它返回编号的令牌,因此您可以轻松地通过令牌编号匹配两 (30) 列中的令牌。 -
不过,理想情况下,您应该通过规范化而不是在单个值中存储多个值来修复您的设计。
-
繁琐的解决方案通常是您为糟糕的数据库设计付出的代价。
标签: sql sql-server split multivalue