sql 分列多行

sql 分列多行,第1张

参考以下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 如何批量分列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10091017.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存