sql 把一个字段分成多个字段
abc1aaa-bbb-bbb232vvv-nnnn243qqq-www-wwww12变成如下形式:ab1b2b3c1aaabbbbbb232vvvnnnn243qqqw...
a b c
1 aaa-bbb-bbb 23
2 vvv-nnnn 24
3 qqq-www-wwww 12
变成如下形式:
a b1 b2 b3 c
1 aaa bbb bbb 23
2 vvv nnnn 24
3 qqq www wwww 12
我要mssql版本的 别给我Mysql和Oracle的
mysql> select * from t_fengchujun;
+------+--------------------+------+
| a | b | c |
+------+--------------------+------+
| 1 | fsdf-fefw-few-fegh | d |
| 2 | fhtre-reh-eh-jeg | fd |
| 3 | hjre-heg-wfbc | d |
+------+--------------------+------+
3 rows in set (0.00 sec)
mysql> select a,
-> SUBSTRING_INDEX(concat(b,'----'),'-',1) as b1,
-> SUBSTRING_INDEX(SUBSTRING_INDEX(concat(b,'----'),'-',2),'-',-1) as b2,
-> SUBSTRING_INDEX(SUBSTRING_INDEX(concat(b,'----'),'-',3),'-',-1) as b3,
-> SUBSTRING_INDEX(SUBSTRING_INDEX(concat(b,'----'),'-',4),'-',-1) as b4,
-> c
-> from t_fengchujun;
+------+-------+------+------+------+------+
| a | b1 | b2 | b3 | b4 | c |
| 1 | fsdf | fefw | few | fegh | d |
| 2 | fhtre | reh | eh | jeg | fd |
| 3 | hjre | heg | wfbc | | d |
就是这种效果如何达到,上边是mysql的 希望能转换成mssql的 展开
1 aaa-bbb-bbb 23
2 vvv-nnnn 24
3 qqq-www-wwww 12
变成如下形式:
a b1 b2 b3 c
1 aaa bbb bbb 23
2 vvv nnnn 24
3 qqq www wwww 12
我要mssql版本的 别给我Mysql和Oracle的
mysql> select * from t_fengchujun;
+------+--------------------+------+
| a | b | c |
+------+--------------------+------+
| 1 | fsdf-fefw-few-fegh | d |
| 2 | fhtre-reh-eh-jeg | fd |
| 3 | hjre-heg-wfbc | d |
+------+--------------------+------+
3 rows in set (0.00 sec)
mysql> select a,
-> SUBSTRING_INDEX(concat(b,'----'),'-',1) as b1,
-> SUBSTRING_INDEX(SUBSTRING_INDEX(concat(b,'----'),'-',2),'-',-1) as b2,
-> SUBSTRING_INDEX(SUBSTRING_INDEX(concat(b,'----'),'-',3),'-',-1) as b3,
-> SUBSTRING_INDEX(SUBSTRING_INDEX(concat(b,'----'),'-',4),'-',-1) as b4,
-> c
-> from t_fengchujun;
+------+-------+------+------+------+------+
| a | b1 | b2 | b3 | b4 | c |
| 1 | fsdf | fefw | few | fegh | d |
| 2 | fhtre | reh | eh | jeg | fd |
| 3 | hjre | heg | wfbc | | d |
就是这种效果如何达到,上边是mysql的 希望能转换成mssql的 展开
6个回答
展开全部
方法和详细的操作步骤如下:
1、第一步,新的PHP文件,见下图,转到下面的步骤。
2、第二步,执行完上面的操作之后,需要声明数组变量,见下图,转到下面的步骤。
3、第三步,执行完上面的操作之后,使用函数将阵列连接到带有连接字符的字符串,见下图,转到下面的步骤。
4、第四步,执行完上面的操作之后,输出连接的字符串,见下图,转到下面的步骤。
5、第五步,执行完上面的操作之后,预览的效果见下图,转到下面的步骤。
6、第六步,执行完上面的操作之后,使用“implode”函数将数组拼接成字符串,使用“?”进行连接,见下图。这样,就解决了这个问题了。
2016-07-27 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
举例:
原始SQL:
SELECT
PROVINCE_CODE,
CITY_CODE,
ZONE_CODE
FROM CIV_P_CUST
原始结果:
拆分SQL:
SELECT
substring(PROVINCE_CODE,1,patindex('%〓%',PROVINCE_CODE)-1) as PID,
substring(PROVINCE_CODE,patindex('%〓%',PROVINCE_CODE)+1,len(PROVINCE_CODE)) as PNAME,
substring(CITY_CODE,1,patindex('%〓%',CITY_CODE)-1) as CID,
substring(CITY_CODE,patindex('%〓%',CITY_CODE)+1,len(CITY_CODE)) as CNAME,
substring(ZONE_CODE,1,patindex('%〓%',ZONE_CODE)-1) as ZID,
substring(ZONE_CODE,patindex('%〓%',ZONE_CODE)+1,len(ZONE_CODE)) as ZNAME
FROM CIV_P_CUST
拆分结果:
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select a, dbo.split(b,'-',1) as b1, dbo.split(b,'-',2) as b2, dbo.split(b,'-',3) as b3, c from t_fengchujun
在执行上面的语句前,需要先创建一个字符串函数代码如下,在查询分析器执行
create function dbo.split(
@srcstr varchar(4000),
@space varchar(50),
@showindex int
)returns varchar(4000)
begin
declare @pos1 int
declare @pos2 int
declare @index int
declare @return varchar(4000)
set @pos1 = 0
set @pos2 = 0
set @index = 0
set @srcstr = @srcstr + @space
while @index<@showindex
begin
set @pos1 = @pos2
set @pos2 = charindex(@space,@srcstr,@pos1+1)
if @pos2-@pos1-1>0
set @return = substring(@srcstr,@pos1+1,@pos2-@pos1-1)
else
begin
set @pos2 = len(@srcstr)
set @return = ''
end
set @index = @index + 1
end
return(@return)
end
go
在执行上面的语句前,需要先创建一个字符串函数代码如下,在查询分析器执行
create function dbo.split(
@srcstr varchar(4000),
@space varchar(50),
@showindex int
)returns varchar(4000)
begin
declare @pos1 int
declare @pos2 int
declare @index int
declare @return varchar(4000)
set @pos1 = 0
set @pos2 = 0
set @index = 0
set @srcstr = @srcstr + @space
while @index<@showindex
begin
set @pos1 = @pos2
set @pos2 = charindex(@space,@srcstr,@pos1+1)
if @pos2-@pos1-1>0
set @return = substring(@srcstr,@pos1+1,@pos2-@pos1-1)
else
begin
set @pos2 = len(@srcstr)
set @return = ''
end
set @index = @index + 1
end
return(@return)
end
go
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我的思路是:
1、先判断b列中的最多的“-”,建表,同时将数据插入到新表;
2、用charindex判断后,每列去更新。
1、先判断b列中的最多的“-”,建表,同时将数据插入到新表;
2、用charindex判断后,每列去更新。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个只用sql语句比较麻烦,由于不确定性存在,基本不可能完善解决,最好办法是结合程序来做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询