27,580
社区成员
发帖
与我相关
我的任务
分享
create table #test(id int, name varchar(30))
insert into #test values
(1,'_/001002/_/015/_/_'),(2,'_/001002/_/1117/_/_'),
(3,'_/001002/_/615/_/_'),(4,'_/X001002/_/AA15/_/_')
SELECT A.id,[NAME]=B.value
FROM #test A
CROSS APPLY string_split([NAME],'/') B
WHERE B.value<>'_'
id NAME
----------- ------------------------------
1 001002
1 015
2 001002
2 1117
3 001002
3 615
4 X001002
4 AA15
(8 行受影响)
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([col] nvarchar(38))
Insert #T
select N'_/001001/_/014/_/_' union all
select N'_/001002/_/015/_/_'
Go
--测试数据结束
SELECT
SUBSTRING(col, 3, 6) AS c1,
SUBSTRING(col, 12, 3) AS c2
FROM
#T;
-- 这个也算是一个比较常见的问题了。
-- 参考一下这个
create table test(id int, name varchar(30))
insert into test values
(1,'_/001002/_/015/_/_'),(2,'_/001002/_/1117/_/_'),
(3,'_/001002/_/615/_/_'),(4,'_/X001002/_/AA15/_/_')
go
-- 用这个方法拆分,汇总你自己来吧
SELECT A.id,
A.name.value('v[1]','varchar(20)') v1,
A.name.value('v[2]','varchar(20)') v2,
A.name.value('v[3]','varchar(20)') v3,
A.name.value('v[4]','varchar(20)') v4
FROM(
SELECT id,
name = CONVERT(xml,'<v>' + REPLACE(name, '/', '</v><v>') + '</v>')
FROM test
)A
go
drop table test
(4 行受影响)
id v1 v2 v3 v4
----------- --------------- --------------- --------------- ---------------
1 _ 001002 _ 015
2 _ 001002 _ 1117
3 _ 001002 _ 615
4 _ X001002 _ AA15
(4 行受影响)