sql 把一个字段分成多个字段

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、第一步,新的PHP文件,见下图,转到下面的步骤。

2、第二步,执行完上面的操作之后,需要声明数组变量,见下图,转到下面的步骤。

3、第三步,执行完上面的操作之后,使用函数将阵列连接到带有连接字符的字符串,见下图,转到下面的步骤。

4、第四步,执行完上面的操作之后,输出连接的字符串,见下图,转到下面的步骤。

5、第五步,执行完上面的操作之后,预览的效果见下图,转到下面的步骤。

6、第六步,执行完上面的操作之后,使用“implode”函数将数组拼接成字符串,使用“?”进行连接,见下图。这样,就解决了这个问题了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-07-27

举例:

原始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

拆分结果:

本回答被网友采纳
第2个回答  推荐于2017-12-16
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本回答被提问者采纳
第3个回答  2011-01-25
我的思路是:
1、先判断b列中的最多的“-”,建表,同时将数据插入到新表;
2、用charindex判断后,每列去更新。
第4个回答  2011-01-25
这个只用sql语句比较麻烦,由于不确定性存在,基本不可能完善解决,最好办法是结合程序来做

sql 把一个字段分成多个字段
6、第六步,执行完上面的操作之后,使用“implode”函数将数组拼接成字符串,使用“?”进行连接,见下图。这样,就解决了这个问题了。

SQL语句:如何让一个字段按个数分成几个字段显示
set @sql = @sql + ' 1 noshow from ( select row_number() over ( order by BH ) r_n,* from 你的表名 ) s group by ( r_n - 1 ) % 3 'exec ( @sql )注意:这其中 BH 就是你的字段名,如果是其他字段名,要改一下。

某一个字段分成多个字段的问题
SQL:select Date,Time,Priority,HostName,substr(Message,1,instr(Message,'') as Message_A,... as Message_B,... as Message_C,... as Message_D,... as Message_E from table

SQL 把一个字段拆分成多个字段
用Charindex()定位分隔符,然后用left()或Right()或Substring()截取字符串

数据库的表中写一个sql把已有字段对应的值 拆分为多个字段
那是因为条件 substr(money,1,length(money=6)=1) = '人民币' 没有符合条件的数据,所以是null,你用 select substr(money,1,length(money=6)=1) , * from table 看看是什么结果,一般判断字符串里是否保护某些字符,应该用charindex函数才对的。

sql 把一个字段分成多个字段
sql 把一个字段分成多个字段 30 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 ... 展开 在监狱里的日子 | 浏览4612 次 |举报 我有更好的答案推荐于2018-02-28 10:38:58 最佳答案 举例: 原始SQL: 1 2 3 4 5 SELECT PROVINCE_...

SQL一张表的一个字段多个字段名怎么设计?
方法一:长短不同,就用临时表来建字段,varchar()用长的来做字段长度。然后向临时表插入数据;方法二:用union all select cast(a.tt as varchar(30)) from a union all select cast(b.tt as varchar(30)) from b 上衣,裤子,都是tt 字段;varchar(30),30这个数不能小与最大长度就行...

怎样将SQL查出的字段分成两列解决办法
select substr(字段名称,1,x),substr(字段名称,x+1) from 表名;其中X代表你要截取的该字段要设置为第一列的长度。例如:select substr(empno,1,2)第一列,substr(empno,3)第二列 from emp;这样查询出来显示的就把 empno 字段分为了2列。

SQL中用Group by 分组 假如有个字段ID,值1~10,想分成3组(1,3,7)(2...
sum(case when id in (2,4,5,6) then 1 else 0 end),sum(case when id in (8,9,10) then 1 else 0 end)from tb group by id 这个意思?---补充--- select num,sum(case when id in (1,3,7) then num else 0 end),sum(case when num in (2,4,5,6) then num else...

SQL中怎么把A表一个字段的值分割出来分别填进B表不同的字段??
Declare @S1 varchar(100)Select @S1='母项id=546456 子项id=32423,2342,2342,45645 子项数量=3 计划百分比=0.1 专项控制=T 物料形态属性=1'select top 5 right(left(@S1,charindex(' ',(@S1))-1),charindex('=',REVERSE(left(@S1,charindex(' ',(@S1))-1)))-1) 母项id,--left(...

相似回答