SQL中如何把一个字段的值拆分成另外两个字段的值?

时间:2023-02-10 18:02:55
SQL中如何把一个字段的值拆分成另外两个字段的值?现在有一张表,如下
       商品名称 
   耐克  DS001
   安踏  AT002
   阿迪达斯  AD009 
变成 下面这种表 
   品牌         商品代码
   耐克           DS001
   安踏           AT002
 阿迪达斯     AD009   

9 个解决方案

#1


真正的商品代码,都是字母或数字开头吗?

#2


引用 1 楼 wmxcn2000 的回复:
真正的商品代码,都是字母或数字开头吗?

我只是打个比方 

#3


引用 2 楼 HQSummer 的回复:
Quote: 引用 1 楼 wmxcn2000 的回复:

真正的商品代码,都是字母或数字开头吗?

我只是打个比方 

得有具体的规律才可以拆的;或者说,有一张品牌的列表,也可以的;

#4


引用 1 楼 wmxcn2000 的回复:
真正的商品代码,都是字母或数字开头吗?

品牌和商品代码在商品名称中都是以空格隔开的  我就是想以空格来区分品牌和商品代码

#5



create table test(pp varchar(30))
go
insert into test values('耐克 DS001'),('安踏 AT002'),('阿迪达斯 AD009')
go
select 
substring(pp,1,charindex(' ',pp))pp1, 
substring(pp,charindex(' ',pp) +1,30) pp2
from test 
go
drop table test 
go

(3 行受影响)
pp1                            pp2
------------------------------ ------------------------------
耐克                             DS001
安踏                             AT002
阿迪达斯                           AD009

(3 行受影响)


#6


看你的格式,分隔符为两个空格
e.g.
SELECT  LEFT(商品名称, CHARINDEX('  ', 商品名称 + '  ') - 1) AS 品牌 ,
        STUFF(商品名称, 1, CHARINDEX('  ', 商品名称 + '  ') + 1, '') AS 商品代码
FROM    ( VALUES ( '耐克  DS001'), ( '安踏  AT002'), ( '阿迪达斯  AD009') ) t ( 商品名称 ); 
/*
品牌 商品代码
耐克 DS001
安踏 AT002
阿迪达斯 AD009
*/

#7


引用 6 楼 roy_88 的回复:
看你的格式,分隔符为两个空格
e.g.
SELECT  LEFT(商品名称, CHARINDEX('  ', 商品名称 + '  ') - 1) AS 品牌 ,
        STUFF(商品名称, 1, CHARINDEX('  ', 商品名称 + '  ') + 1, '') AS 商品代码
FROM    ( VALUES ( '耐克  DS001'), ( '安踏  AT002'), ( '阿迪达斯  AD009') ) t ( 商品名称 ); 
/*
品牌 商品代码
耐克 DS001
安踏 AT002
阿迪达斯 AD009
*/


select * from (values())  , 这种语法, 真是头一次见,刚看了下官文,长了见识了。 

大版 V5 

#8


select '耐克  DS001' as col1 into #a
select left(col1,(select charindex('  ',col1))), substring(col1,(select charindex('  ',col1)),(select len(col1))) from #a 


这个意思?

#9


引用 6 楼 roy_88 的回复:
看你的格式,分隔符为两个空格
e.g.
SELECT  LEFT(商品名称, CHARINDEX('  ', 商品名称 + '  ') - 1) AS 品牌 ,
        STUFF(商品名称, 1, CHARINDEX('  ', 商品名称 + '  ') + 1, '') AS 商品代码
FROM    ( VALUES ( '耐克  DS001'), ( '安踏  AT002'), ( '阿迪达斯  AD009') ) t ( 商品名称 ); 
/*
品牌 商品代码
耐克 DS001
安踏 AT002
阿迪达斯 AD009
*/




这种 该怎么拆  aa 字段值    K500+200   拆成  bb=500 cc=200 
                           aa 字段值    K500+200-K500+400  拆成 bb=500  cc=200 dd=500 ee=400 ?

#1


真正的商品代码,都是字母或数字开头吗?

#2


引用 1 楼 wmxcn2000 的回复:
真正的商品代码,都是字母或数字开头吗?

我只是打个比方 

#3


引用 2 楼 HQSummer 的回复:
Quote: 引用 1 楼 wmxcn2000 的回复:

真正的商品代码,都是字母或数字开头吗?

我只是打个比方 

得有具体的规律才可以拆的;或者说,有一张品牌的列表,也可以的;

#4


引用 1 楼 wmxcn2000 的回复:
真正的商品代码,都是字母或数字开头吗?

品牌和商品代码在商品名称中都是以空格隔开的  我就是想以空格来区分品牌和商品代码

#5



create table test(pp varchar(30))
go
insert into test values('耐克 DS001'),('安踏 AT002'),('阿迪达斯 AD009')
go
select 
substring(pp,1,charindex(' ',pp))pp1, 
substring(pp,charindex(' ',pp) +1,30) pp2
from test 
go
drop table test 
go

(3 行受影响)
pp1                            pp2
------------------------------ ------------------------------
耐克                             DS001
安踏                             AT002
阿迪达斯                           AD009

(3 行受影响)


#6


看你的格式,分隔符为两个空格
e.g.
SELECT  LEFT(商品名称, CHARINDEX('  ', 商品名称 + '  ') - 1) AS 品牌 ,
        STUFF(商品名称, 1, CHARINDEX('  ', 商品名称 + '  ') + 1, '') AS 商品代码
FROM    ( VALUES ( '耐克  DS001'), ( '安踏  AT002'), ( '阿迪达斯  AD009') ) t ( 商品名称 ); 
/*
品牌 商品代码
耐克 DS001
安踏 AT002
阿迪达斯 AD009
*/

#7


引用 6 楼 roy_88 的回复:
看你的格式,分隔符为两个空格
e.g.
SELECT  LEFT(商品名称, CHARINDEX('  ', 商品名称 + '  ') - 1) AS 品牌 ,
        STUFF(商品名称, 1, CHARINDEX('  ', 商品名称 + '  ') + 1, '') AS 商品代码
FROM    ( VALUES ( '耐克  DS001'), ( '安踏  AT002'), ( '阿迪达斯  AD009') ) t ( 商品名称 ); 
/*
品牌 商品代码
耐克 DS001
安踏 AT002
阿迪达斯 AD009
*/


select * from (values())  , 这种语法, 真是头一次见,刚看了下官文,长了见识了。 

大版 V5 

#8


select '耐克  DS001' as col1 into #a
select left(col1,(select charindex('  ',col1))), substring(col1,(select charindex('  ',col1)),(select len(col1))) from #a 


这个意思?

#9


引用 6 楼 roy_88 的回复:
看你的格式,分隔符为两个空格
e.g.
SELECT  LEFT(商品名称, CHARINDEX('  ', 商品名称 + '  ') - 1) AS 品牌 ,
        STUFF(商品名称, 1, CHARINDEX('  ', 商品名称 + '  ') + 1, '') AS 商品代码
FROM    ( VALUES ( '耐克  DS001'), ( '安踏  AT002'), ( '阿迪达斯  AD009') ) t ( 商品名称 ); 
/*
品牌 商品代码
耐克 DS001
安踏 AT002
阿迪达斯 AD009
*/




这种 该怎么拆  aa 字段值    K500+200   拆成  bb=500 cc=200 
                           aa 字段值    K500+200-K500+400  拆成 bb=500  cc=200 dd=500 ee=400 ?