我有这些行
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 :(得分: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
答案 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