2016-09-07 67 views
0

我有这行子在SQLSERVER与休闲格式

14-L-100-10008-G03S-N 
1-DR-100-20057-G48-N 
2-CL-100-12133-B12-P 
2-FG-100-12202-B01-N 
2-G-100-15520-B48-N 
2-GM-100-10024-B01-N 
2-HC-100-10022-G03S-N 
2-HC-100-10023-G03S-N 
2-HC-100-20023-G03S-N 
32-G-100-15518-F03P2-N 
32-G-100-15518-F03P2-N 

我只是需要这些部件在使用这些部分SQL Server代码。如何可以获取:

result:G03S,G48,B12,B01,B48,B12 and ... 
+0

@NEER没有,你可以看到,有时N或PT不特定的格式 –

+0

的我只能看到第二个倒数和最后一个减号。 – AntDC

回答

1

您可以按以下:

;WITH CTE 
AS 
(
select '14-L-100-10008-G03S-N' Val UNION ALL 
select '1-DR-100-20057-G48-N' Val UNION ALL 
select '2-CL-100-12133-B12-P' Val UNION ALL 
select '2-FG-100-12202-B01-N' Val UNION ALL 
select '2-G-100-15520-B48-N' Val UNION ALL 
select '2-GM-100-10024-B01-N' Val UNION ALL 
select '2-HC-100-10022-G03S-N' Val UNION ALL 
select '2-HC-100-10023-G03S-N' Val UNION ALL 
select '2-HC-100-20023-G03S-N' Val UNION ALL 
select '32-G-100-15518-F03P2-N' Val UNION ALL 
select '32-G-100-15518-F03P2-N' 
) 

SELECT REVERSE(SUBSTRING(REVERSE(Val), CHARINDEX('-', REVERSE(Val), 0) + 1, CHARINDEX('-', REVERSE(Val), CHARINDEX('-', REVERSE(Val), 0) + 1) - CHARINDEX('-', REVERSE(Val)) - 1)) 
FROM 
    CTE 

编辑:

SELECT 
(
    SELECT REVERSE(SUBSTRING(REVERSE(Val), CHARINDEX('-', REVERSE(Val), 0) + 1, CHARINDEX('-', REVERSE(Val), CHARINDEX('-', REVERSE(Val), 0) + 1) - CHARINDEX('-', REVERSE(Val)) - 1)) + ' ,' 
    FROM 
     CTE 
    FOR XML PATH ('') 
) Result 

结果:G03S ,G48 ,B12 ,B01 ,B48 ,B01 ,G03S ,G03S ,G03S ,F03P2 ,F03P2 ,

SELECT LEFT(A.Result, LEN(A.Result) -1) FROM 
(SELECT (SELECT REVERSE(SUBSTRING(REVERSE(Val), CHARINDEX('-', REVERSE(Val), 0) + 1, CHARINDEX('-', REVERSE(Val), CHARINDEX('-', REVERSE(Val), 0) + 1) - CHARINDEX('-', REVERSE(Val)) - 1)) + ' ,' FROM CTE FOR XML PATH ('')) Result) A 

结果:G03S ,G48 ,B12 ,B01 ,B48 ,B01 ,G03S ,G03S ,G03S ,F03P2 ,F03P2

+0

如何合并我的查询与您的查询,这里是我的查询:从线 –

+1

选择LineNumber上@EhsanAkbar更新 – NEER

+1

谢谢你亲爱的朋友 –

0

使用splitstring functions from here之一..

create table #t 
(
id varchar(max) 
) 

insert into #t 
select '14-L-100-10008-G03S-N' 
union all 
select '1-DR-100-20057-G48-N' 

select item 
from #t t1 
cross apply 
(select * ,row_number() over (partition by t1.id order by t1.id) as rn from [dbo].[SplitStrings_Numbers](t1.id,'-') 
) b 
where rn=5 
+0

消息208,级别16,状态1,2号线 无效的对象名称dbo.SplitStrings_Numbers“ 。 –