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

字段处理问题?
刚才可能问的不太清楚,重新问一遍:
有如下的纪录若干条:
双金属温度计\WSS-481F\0-400℃   L=300   Φ10   G3/4\本体材质:304
双金属温度计\WSS-481\0-500℃   L=100   Φ8   NPT1/2 "\本体材质:304
双金属温度计\WSS-481\-40~80℃   L=100   Φ8   NPT1/2 "\本体材质:304
双金属温度计\WSS-481\-40~80℃   L=50   Φ5   M27×2\本体材质:1Cr18Ni9T
.
.
.
想处理完是下面的形式:
双金属温度计\WSS-481F\L=300\本体材质:304
双金属温度计\WSS-481\L=100\本体材质:304
双金属温度计\WSS-481\L=100\本体材质:304
双金属温度计\WSS-481\L=50\本体材质:1Cr18Ni9T
.
.
.
如何解决?最主要的是℃和Φ的值是变的,如何处理?等这个问题解决了和上个帖子一起给大家结分^-^先谢谢大家了

------解决方案--------------------
create table tb(col varchar(100))
insert into tb values( '双金属温度计\WSS-481F\0-400℃ L=300 Φ10 G3/4\本体材质:304 ')
insert into tb values( '双金属温度计\WSS-481\0-500℃ L=100 Φ8 NPT1/2 "\本体材质:304 ')
insert into tb values( '双金属温度计\WSS-481\-40~80℃ L=100 Φ8 NPT1/2 "\本体材质:304 ')
insert into tb values( '双金属温度计\WSS-481\-40~80℃ L=50 Φ5 M27×2\本体材质:1Cr18Ni9T ')
go

select reverse(substring(reverse(left(col , charindex( '℃ ',col))) , charindex( '\ ',reverse(left(col , charindex( '℃ ',col)))),len(reverse(left(col , charindex( '℃ ',col)))))) +
substring(col , charindex( '℃ ' , col) + 2 , charindex( 'Φ ' , col) - charindex( '℃ ' , col) - 3) +
substring(col , charindex( '\ ' , col , charindex( 'Φ ' , col)) , len(col)) col from tb
drop table tb

/*
col
------------------------------------------
双金属温度计\WSS-481F\L=300\本体材质:304
双金属温度计\WSS-481\L=100\本体材质:304
双金属温度计\WSS-481\L=100\本体材质:304
双金属温度计\WSS-481\L=50\本体材质:1Cr18Ni9T

(所影响的行数为 4 行)
*/
------解决方案--------------------
create table #b(a varchar(100))
insert #b select
'双金属温度计\WSS-481F\0-400℃ L=300 Φ10 G3/4\本体材质:304 ' insert #b select
'双金属温度计\WSS-481\0-500℃ L=100 Φ8 NPT1/2 "\本体材质:304 ' insert #b select
'双金属温度计\WSS-481\-40~80℃ L=100 Φ8 NPT1/2 "\本体材质:304 ' insert #b select
'双金属温度计\WSS-481\-40~80℃ L=50 Φ5 M27×2\本体材质:1Cr18Ni9T '
update #b set a=replace(a,replace(PARSENAME(replace(replace(a, '\ ', '. '), ' " ', '_ '),2), '_ ', ' " ') , PARSENAME(replace(PARSENAME(replace(replace(a, '\ ', '. '), ' " ', '_ '),2), ' ', '. '),3))
select a from #b
------解决方案--------------------
--創建測試環境
Create Table TEST
(A Nvarchar(200))
--插入數據
Insert TEST Select N '双金属温度计\WSS-481F\0-400℃ L=300 Φ10 G3/4\本体材质:304 '
Union All Select N '双金属温度计\WSS-481\0-500℃ L=100 Φ8 NPT1/2 "\本体材质:304 '
Union All Select N '双金属温度计\WSS-481\-40~80℃ L=100 Φ8 NPT1/2 "\本体材质:304 '
Union All Select N '双金属温度计\WSS-481\-40~80℃ L=50 Φ5 M27×2\本体材质:1Cr18Ni9T '
GO
--測試
Select Left(A, CharIndex( '\ ', A, CharIndex( '\ ', A) + 1)) +
Substring(A, CharIndex( '℃ ', A) + 2, CharIndex( 'Φ ', A) - CharIndex( '℃ ', A) - 3) +
Right(A, CharIndex( '\ ', Reverse(A))) As A
From TEST
--刪除測試環境
Drop Table TEST
GO
--結果
/*
A
双金属温度计\WSS-481F\L=300\本体材质:304
双金属温度计\WSS-481\L=100\本体材质:304
双金属温度计\WSS-481\L=100\本体材质:304
双金属温度计\WSS-481\L=50\本体材质:1Cr18Ni9T
*/