
参考以下sql
-- 测试一-- 'abc|efg|hij|klm' 参数一:截取的字符串str
-- '|' 参数二:在截取的字符串str中查询目标字符x
-- 1 参数三:出现的位次n
-- 截取str中x出现n次之前的所有字符
-- 截取'abc|efg|hij|klm'中第一个'|'之前的所有字符 abc
SELECT SUBSTRING_INDEX('abc|efg|hij|klm', '|', 1)
-- 测试二
-- 'abc|efg|hij|klm' 参数一:截取的字符串str
-- '|' 参数二:在截取的字符串str中查询目标字符x
-- -1 参数三:当为负数时,则表示倒序的位次
-- 截取str后中x出现从后往前数n次之后的所有字符
-- 截取'abc|efg|hij|klm'中从后往前数第一个'|'之后的所有字符 klm
SELECT SUBSTRING_INDEX('abc|efg|hij|klm', '|', -1)
SELECT SUBSTRING_INDEX(name, '=', 1) AS city, SUBSTRING_INDEX(name, '=', -1) AS name FROM TB_USER;
上面那个是用于查询的,如果是想修改数据库,则用下面的语句:
ALTER TABLE TB_USER
ADD COLUMN city VARCHAR(16) NULL;
UPDATE TB_USER SET city = SUBSTRING_INDEX(name, '=', 1),
name = SUBSTRING_INDEX(name, '=', -1);
你参考下:
--模拟数据
create table #yourtable(ID int,Content varchar(4000))
insert into #yourtable(ID,Content)
select 1,'22|5000|3000'
union all select 2,'1|35|200|2'
union all select 3,'802|22'
union all select 4,'213|354|2002|22|500'
--实际 *** 作SQL
declare @sql nvarchar(4000),@i int
set @i=1
while exists(select 1 from #yourtable where Content<>'')
begin
set @sql='alter table #yourtable add Data'+convert(varchar,@i)+' int'
exec(@sql)
set @sql='declare @loc int update #yourtable set @loc=charindex(''|'',Content),Data'
+convert(varchar,@i)+'=convert(int,case @loc when 0 then Content else '
+'substring(Content,1,@loc-1) end),Content=case @loc when 0 then '''' else '
+'substring(Content,@loc+1,len(Content)-@loc) end where Content<>'''''
exec(@sql)
set @i=@i+1
end
select from #yourtable
--删除演示数据
drop table #yourtable
--结果
ID Data1 Data2 Data3 Data4 Data5
----------- ----------- ----------- ----------- ----------- -----------
1 22 5000 3000 NULL NULL
2 1 35 200 2 NULL
3 802 22 NULL NULL NULL
4 213 354 2002 22 500
1建议您使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也是方法之一,之后在EXCEL里面用“分列”重新分开。2身份z列格式改为“常规”或“文本”显示就可以了。希望你帮到你。
分隔字符串代码 用','分隔
用下面的函数
create function f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(100)) returns @temp table(F1 varchar(100)) as begin declare @ch as varchar(100) set @SourceSql=@SourceSql+@StrSeprate while(@SourceSql<>'') begin set @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1) insert @temp values(@ch) set @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'') end return end
以上就是关于sql 分列多行全部的内容,包括:sql 分列多行、mysql中根据某个字符为间隔进行分列(有举例)、sql 如何批量分列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)