日期:2014-05-18  浏览次数:20554 次

还是字段拆分问题?
我要处理的是N行这样的字段要拆分,而且不是都是像下面这样的规则:

热轧普通碳素H型钢\H300×200×8×12mm\Q235B

这已经用 '\ '标记出三段了,我要处理的是底下这样的情况:

热轧\普通碳素\H型钢\H300×200×8×12mm\Q235B

中间可能有很多 '\ '标记,但是还是要把它分成三部分,比如拆分成下面的形式:
/*
热轧\普通碳素           H型钢\H300×200×8×12mm               Q235B

如何解决?

前面我已经问过一个类似的问题,已经结贴了,先谢谢大家了!


------解决方案--------------------
数据没有固定的拆分规则,很难用程序拆分。
------解决方案--------------------
----创建测试数据
declare @t table(name varchar(100))
insert @t
select '热轧普通碳素H型钢\H300×200×8×12mm\Q235B ' union all
select '热轧\普通碳素\H型钢\H300×200×8×12mm\Q235B '


----查询(当名称中的 "\ "大于3时保存第一个和倒数第二个 "\ ",其它的替换为1个空格,否则不作处理)
SELECT name =
--判断 "\ "的数量是否大于3
case when charindex( '\ ',name,charindex( '\ ',name,charindex( '\ ',name,1) + 1) + 1) > 0
then
--先将第一个和倒数第二个 "\ "替换成char(10),然后将其它 "\ "替换成一个空格
--最后再将char(10)替换回 "\ "
replace(replace(reverse(stuff(reverse(stuff(name,charindex( '\ ',name,1),1,char(10))),
charindex( '\ ',reverse(stuff(name,charindex( '\ ',name,1),1,char(10))),
charindex( '\ ',reverse(stuff(name,charindex( '\ ',name,1),1,char(10))),1) + 1),1,char(10))), '\ ', ' '),char(10), '\ ')
else name end
FROM @t


/*结果
name
--------------------------------------
热轧普通碳素H型钢\H300×200×8×12mm\Q235B
热轧\普通碳素 H型钢\H300×200×8×12mm Q235B
*/
------解决方案--------------------
纠正一下:上面回复中说明部分的 "大于3 "应该为大于等于3或者大于2。
------解决方案--------------------
这么智能的东西不好做.
除非有一定的规则
------解决方案--------------------
那要是有這麼多\呢? LZ乍拆?

热\轧\普\通\碳\素\H\型\钢\H\3\0\0\×\2\0\0\×\8\×\1\2\m\m\Q\2\3\5\B

------解决方案--------------------
应该考虑建立模型表来匹配,
如H型钢这样的字段应该是有限多的,记录到模型表以便查找
------解决方案--------------------
没有规则啊,怎么拆?