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的
展开
 我来答
59分粑粑分享生活
高粉答主

2020-05-14 · 专注生活好物分享,解答日常方方面面的问题
59分粑粑分享生活
采纳数:326 获赞数:119834

向TA提问 私信TA
展开全部

方法和详细的操作步骤如下:

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

拆分结果:

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
abingpow
推荐于2017-12-16 · TA获得超过2206个赞
知道大有可为答主
回答量:2830
采纳率:0%
帮助的人:2282万
展开全部
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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wrongcai
2011-01-25 · TA获得超过200个赞
知道小有建树答主
回答量:380
采纳率:100%
帮助的人:267万
展开全部
我的思路是:
1、先判断b列中的最多的“-”,建表,同时将数据插入到新表;
2、用charindex判断后,每列去更新。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhbmlong
2011-01-25 · TA获得超过133个赞
知道小有建树答主
回答量:403
采纳率:0%
帮助的人:337万
展开全部
这个只用sql语句比较麻烦,由于不确定性存在,基本不可能完善解决,最好办法是结合程序来做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式