您的位置:程序门 -> ms-sql server -> 疑难问题



字段处理问题?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


字段处理问题?[已结贴,结贴人:woaiwd]
发表于:2007-08-21 15:36:25 楼主
刚才可能问的不太清楚,重新问一遍:
有如下的纪录若干条:
双金属温度计\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
.
.
.
如何解决?最主要的是℃和φ的值是变的,如何处理?等这个问题解决了和上个帖子一起给大家结分^-^先谢谢大家了
发表于:2007-08-21 15:39:081楼 得分:0
果真是这样
发表于:2007-08-21 15:47:182楼 得分:50
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   行)
*/
发表于:2007-08-21 15:49:223楼 得分:20
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
发表于:2007-08-21 15:49:534楼 得分:0
分三段截取.
1,找℃之前的\之前的数据
2,找℃到φ之间的数据
3,找φ之后\之后的数据
就是上面+分割的三段.

前提,col中必须保证有℃,φ.否则会出错.
发表于:2007-08-21 15:51:315楼 得分:0

select   left(a,   charindex( '\ ',   a,   charindex( '\ ',   a)   +   1))   +
substring(a,   charindex( '℃ ',   a)   +   2,   charindex( 'φ ',   a)   -   charindex( '℃ ',   a)   -   3)   +  
right(a,   charindex( '\ ',   reverse(a)))
from   test
发表于:2007-08-21 15:51:506楼 得分:0
加个条件限制一下.

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
where   charindex( '℃ '   ,   col)   >   0   and   charindex( 'φ '   ,   col)   >   0   and   charindex( 'φ '   ,   col)   >   charindex( '℃ '   ,   col)
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   行)
*/
发表于:2007-08-21 15:53:007楼 得分:30
--創建測試環境
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
*/
发表于:2007-08-21 15:53:088楼 得分:0
若是查询
select   replace(a,replace(parsename(replace(replace(a, '\ ', '. '), ' " ', '_ '),2), '_ ', ' " ')   ,   parsename(replace(parsename(replace(replace(a, '\ ', '. '), ' " ', '_ '),2), '   ', '. '),3))
from   #b
------
双金属温度计\wss-481f\l=300\本体材质:304
双金属温度计\wss-481\l=100\本体材质:304
双金属温度计\wss-481\l=100\本体材质:304
双金属温度计\wss-481\l=50\本体材质:1cr18ni9t


快速检索

最新资讯
热门点击