日期:2014-05-19  浏览次数:20608 次

一个看似简单但写不出来的SQL
NIDEC/日本电产大连有限公司/原价改善室
NIDEC/日本电产大连有限公司/内部监查室
NIDEC/日本电产大连有限公司/DCM生产部
NIDEC/日本电产大连有限公司/DCM生产部/组立G
NIDEC/日本电产大连有限公司/DCM生产部/组立G/RAC工程
NIDEC/日本电产大连有限公司/DCM生产部/组立G/RAC工程/股1
NIDEC/日本电产大连有限公司/FAN生产部/组立M/RAC工程/股1/班1

有这样一个字段(fullname)数据如上,要查出第二个“/”到第四个 "/ "之间的
如:DCM生部/组立G
        FAN生产部/组立M

    试了很长时间没试成,请教   。谢谢   :)
       




------解决方案--------------------

create table Test
(
T1 varchar(500)
)

insert Test select 'NIDEC/日本电产大连有限公司/原价改善室 '
insert Test select 'NIDEC/日本电产大连有限公司/内部监查室 '
insert Test select 'NIDEC/日本电产大连有限公司/DCM生产部 '
insert Test select 'NIDEC/日本电产大连有限公司/DCM生产部/组立G '
insert Test select 'NIDEC/日本电产大连有限公司/DCM生产部/组立G/RAC工程 '
insert Test select 'NIDEC/日本电产大连有限公司/DCM生产部/组立G/RAC工程/股1 '
insert Test select 'NIDEC/日本电产大连有限公司/FAN生产部/组立M/RAC工程/股1/班1 '


select DISTINCT substring(T1,charindex( '/ ',T1,charindex( '/ ',T1)+1)+1,(charindex( '/ ',T1,charindex( '/ ',T1,charindex( '/ ',T1,charindex( '/ ',T1)+1)+1)+1)+1)-(charindex( '/ ',T1,charindex( '/ ',T1)+1)+1)-1)
from Test
where len(T1)-len(REPLACE(T1, '/ ', ' '))> =4
------解决方案--------------------
--环境
create table tab
(
fullname varchar(100)
)

insert into tab select 'NIDEC/日本电产大连有限公司/原价改善室 '
insert into tab select 'NIDEC/日本电产大连有限公司/内部监查室 '
insert into tab select 'NIDEC/日本电产大连有限公司/DCM生产部 '
insert into tab select 'NIDEC/日本电产大连有限公司/DCM生产部/组立G '
insert into tab select 'NIDEC/日本电产大连有限公司/DCM生产部/组立G/RAC工程 '
insert into tab select 'NIDEC/日本电产大连有限公司/DCM生产部/组立G/RAC工程/股1 '
insert into tab select 'NIDEC/日本电产大连有限公司/FAN生产部/组立M/RAC工程/股1/班1 '

--查询
select left(newfullname,charindex( '/ ',newfullname,charindex( '/ ',newfullname) + 1)-1)
from
(
select stuff(fullname,1,charindex( '/ ',fullname,charindex( '/ ',fullname)+1), ' ') as newfullname
from tab
where len(fullname) - len(replace(fullname, '/ ', ' ')) > = 4
)a

--结果
DCM生产部/组立G
DCM生产部/组立G
FAN生产部/组立M
------解决方案--------------------
declare @a table(x varchar(100))
insert @a select 'NIDEC/日本电产大连有限公司/原价改善室 '
union all select 'NIDEC/日本电产大连有限公司/内部监查室 '
union all select 'NIDEC/日本电产大连有限公司/DCM生产部 '
union all select 'NIDEC/日本电产大连有限公司/DCM生产部/组立G '
union all select 'NIDEC/日本电产大连有限公司/DCM生产部/组立G/RAC工程 '
union all select 'NIDEC/日本电产大连有限公司/DCM生产部/组立G/RAC工程/股1 '
union all select 'NIDEC/日本电产大连有限公司/FAN生产部/组立M/RAC工程/股1/班1 '


select distinct left(x,charindex( '/ ',x,charindex( '/ ',x,1)+1)-1) from
(
select right(x,len(x)-charindex( '/ ',x,charindex( '/ ',x,1)+1)) x

from @a where len(x)-len(replace(x, '/ ', ' '))> 3) aa
------解决方案--------------------
--reslut
/*
DCM生产部/组立G
FAN生产部/组立M

(所影响的行数为 2 行)
*/

------解决方案--------------------
CREATE TABLE TABLE_DCM
(ID INT IDENTITY(1,1) ,
fullname VARCHAR(100)
)
DELETE TABLE_DCM