数据库

weixin_42455624 2018-11-13 10:16:44
数据库一张表的一列,有许多组数据是类似这样的
'_/001002/_/015/_/_'
怎么能把两个数据单独取出来啊
...全文
69 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dear SQL(燊) 2018-12-05
  • 打赏
  • 举报
回复
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 行受影响)


weixin_42455624 2018-11-13
  • 打赏
  • 举报
回复
好的,谢谢啦
二月十六 2018-11-13
  • 打赏
  • 举报
回复
水版的方法很好很通用了。
如果楼主的数据格式固定,也可以这样写
--测试数据
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;


卖水果的net 2018-11-13
  • 打赏
  • 举报
回复


-- 这个也算是一个比较常见的问题了。
-- 参考一下这个

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 行受影响)


二月十六 2018-11-13
  • 打赏
  • 举报
回复
把test表换成楼主自己的表名,这个表是测试用的
吉普赛的歌 2018-11-13
  • 打赏
  • 举报
回复
引用 4 楼 weixin_42455624 的回复:
问一下,为什么还要删除test表呢,我还需要test表里这些数据进行插入呢 [quote=引用 1 楼 wmxcn2000 的回复:]


-- 这个也算是一个比较常见的问题了。
-- 参考一下这个

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 行受影响)


[/quote] 他只是帮你测试一下, 不愿意留垃圾, 所以要删。 你自己就不用了。
weixin_42455624 2018-11-13
  • 打赏
  • 举报
回复
问一下,为什么还要删除test表呢,我还需要test表里这些数据进行插入呢
引用 1 楼 wmxcn2000 的回复:


-- 这个也算是一个比较常见的问题了。
-- 参考一下这个

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 行受影响)


27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧