|
1
3
正确的做法是停止使用分隔字符串。 有关更多信息,请阅读 Is storing a delimited list in a database column really that bad? ,你会看到这个问题的答案是 绝对可以!
然而,我知道有时更改数据库结构是不可能的,即使这是正确的做法,所以解决方法是在的第一个参数中包括分隔符
首先,创建并填充示例表( 请 请在以后的问题中省去这一步):
更新声明:
快速选择以确保更新成功:
结果:
你可以在上看到现场演示 db<>fiddle |
|
|
2
3
正如我在评论中提到的,真正的解决方案是修复你的设计。 让我们创建一个快速示例数据集:
创建和
现在我们有了一个标准化的数据集,您的需求很简单,它只是一个简单的
如果你坚持不能改变你的设计(你可以、应该、必须),那么你 能够 拆分字符串,删除“有问题”的值,然后重新聚合:
|
|
|
3
2
edit:在键入所有这些之后,我看到它与Thom A已经给出的答案相似,只是我使用CTE而不是创建表。 您可以使用STRING_SPLIT将csv字段转换为正确的数据,然后处理该数据,然后使用STRING_AGG将其取消转换为csv字段。
STRING_SPLIT在SQL Server 2016中引入
例如,如果您的密钥是MyPrimaryKey,并且具有CSV数据的字段称为CsvField,则可以按如下方式将其拆分:
这将为每个值提供单独的行,如下所示:
一旦你有了这种格式,你可以很容易地删除你不想要的值,使用这样的东西:
这里有一个完整的解决方案,可以将字符串重新聚合在一起:
|
|
|
4
-3
|
|
|
Hard_Course · 用另一列中的值替换行的最后一个非NA条目 1 年前 |
|
|
Alex Howard · 如何用秒开始的值填充数据帧? 1 年前 |
|
|
user1946932 · 正则表达式:删除连续两个以上的<br>? 1 年前 |
|
Neeraj · 用R中的另一组单词替换该组单词 1 年前 |