【发布时间】:2019-01-29 16:18:37
【问题描述】:
我的表中有一个字符串列,其中包含“字符分隔”数据,例如:
“值|数据|4|Z|11/06/2012”
这些数据被输入“解析器”并反序列化为特定对象。 (这个细节不相关,不能更改)
我的对象的结构已经改变,现在我想摆脱一些数据的“部分”
所以我想让之前的值变成这个
“价值|数据|2012 年 11 月 6 日”
我希望我能获得一些关于如何在 T-SQL 中执行此操作的帮助。
数据总是有相同数量的部分,'n',我想删除所有行的相同部分,'n-x 和 'n-y'
到目前为止,我知道我需要一个更新语句来更新我的列值。 我找到了各种拆分字符串的方法,但我很难将它应用到我的场景中。
在 C# 中我会这样做
string RemoveSecitons(string value)
{
string[] bits = string.split(value,'|');
List<string> wantedBits = new List<string>();
for(var i = 0; i < bits.Length; i++)
{
if ( i==2 || i==3) // position of sections I no longer want
{
continue;
}
wantedBits.Add(bits[i]);
}
return string.Join(wantedBits,'|');
}
但是我将如何在 SQL 中执行此操作我不知道从哪里开始。任何帮助将不胜感激
谢谢
附言。我需要在 SQL Server 2012 上运行这个 SQL
编辑:看起来以某种方式解析为 xml 可能是一个流行的答案,但是我不能保证我的字符串不会包含诸如“
【问题讨论】:
-
您正在删除值
4和Z。是否有任何类型的模式可以识别您要删除的数据? -
在我的实际场景中它是一个整数值和一个日期,但是数据包含其他整数值
-
@Dave 。 . .哦,这是一个很好的例子,说明了为什么要将数据存储在列中而不是字符串中。我怀疑有一个有点优雅的 XML 解决方案。
标签: sql tsql sql-server-2012