首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个看似简单但写不出来的SQL,该如何处理

2012-01-09 
一个看似简单但写不出来的SQLNIDEC/日本电产大连有限公司/原价改善室NIDEC/日本电产大连有限公司/内部监查

一个看似简单但写不出来的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


INSERT INTO TABLE_DCM
SELECT 'NIDEC/BBBB/DDS ' UNION ALL
SELECT 'NIDEC/BBBB/DDDSA ' UNION ALL
SELECT 'NIDEC/BBBB/CCCCC ' UNION ALL
SELECT 'NIDEC/BBBB/CCCCC/DDDD ' UNION ALL
SELECT 'NIDEC/BBBB/CCCCC/DDDD/RRRRR ' UNION ALL
SELECT 'NIDEC/BBBB/CCCCC/DDDD/RRRRR/1111 ' UNION ALL
SELECT 'NIDEC/BBBB/CCDDD/DDDDM/RRRR/11111/TTTT1 '


SELECT CASE WHEN charindex( '/ ',newfullname,charindex( '/ ',newfullname) + 1) = 0
THEN AAA.newfullname
ELSE left(newfullname,charindex( '/ ',newfullname,charindex( '/ ',newfullname) + 1)-1)
END AS fullname
FROM

(select stuff(fullname,1,charindex( '/ ',fullname,charindex( '/ ',fullname)+1), ' ') as newfullname

from [TABLE_DCM] ) AAA

热点排行
Bad Request.