2016-09-07 118 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「 。 –