mssql如何把1个字段里的"as|dkf|j|haj|skfdkl"分拆为5个字段输出?
2009-02-05 10:46
337 查看
今天一个客户的技术人员咨询mssql如何把1个字段里的"as|dkf|j|haj|skfdkl"分拆为5个字段输出?
一般是作为5条记录输出。
而charindex又不支持匹配第n次的出现,只有从哪一个字符开始匹配
写起来可能是,第n个字段是(n-1)!次的charindex嵌套使用了 ——晕!!!!
需要先建一个函数,改进charindex支持第n次匹配,之后的写法就会清晰很多
效率不一定高
declare @s varchar(1000)
set @s='1asdk|2jf|3jke|4rjkfje|5wkrfjkwerf'
declare @n int
declare @i int,@p int
set @n=3
set @i=1
set @p=0
while @i<=@n
begin
set @p=charindex('|',@s,@p+1)
set @i=@i+1
end
select @p
这是客户对自己的老系统的改造,原来是4个字段,现在需要保存10项信息了
不想动表结构
一般是作为5条记录输出。
而charindex又不支持匹配第n次的出现,只有从哪一个字符开始匹配
写起来可能是,第n个字段是(n-1)!次的charindex嵌套使用了 ——晕!!!!
declare @s varchar(1000) set @s='1asdk|2jf|3jke|4rjkfje|5wkrfjkwerf' select substring(@s,1,charindex('|',@s,1)-1) ,substring(@s, charindex('|',@s,1)+1 , charindex('|',@s,charindex('|',@s,1)+1) - charindex('|',@s,1)-1 ) ,substring(@s, charindex('|',@s,charindex('|',@s,1)+1) - charindex('|',@s,1)+1, ) /* select substring(@s,1, patindex('%|%',@s)-1 ) ,substring(@s, patindex('%|%',@s)+1 , patindex('%|%|%',@s)-patindex('%|%',@s)+1 ) --print patindex('%|%',@s) --print patindex('%|%|%',@s) --print patindex('%|%|%|%',@s) patindex显然不适合 */ print charindex('|',@s,1) print charindex('|',@s, charindex('|',@s,1)+1 )
需要先建一个函数,改进charindex支持第n次匹配,之后的写法就会清晰很多
效率不一定高
declare @s varchar(1000)
set @s='1asdk|2jf|3jke|4rjkfje|5wkrfjkwerf'
declare @n int
declare @i int,@p int
set @n=3
set @i=1
set @p=0
while @i<=@n
begin
set @p=charindex('|',@s,@p+1)
set @i=@i+1
end
select @p
这是客户对自己的老系统的改造,原来是4个字段,现在需要保存10项信息了
不想动表结构
相关文章推荐
- 解决MSSQL 无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突 问题
- 如何解决"无法直接启动带有类库输出类型的项目"
- JAVA从MySQL取出datetime类型的字段输出后多了个".0"
- "aadfsdfdsfdsafafsafsawerewolfasd" ,不仅要输出出现过的字符还要输出每个字符出现了多少次
- 输出EXCEL报表时如何将科学计数法字段改为文本
- 织梦发布的文章如何批量替换文章"来源"和"作者"?
- PHP如何得到mssql的存储过程的输出参数?
- 如何处理Oledb中EXCEL驱动读取EXCEL文件中字段长度大于255字符时出现的"数据截断"问题.
- poj 2125 最小割解决 "最小点权覆盖问题" +输出解(割边集)
- matlab 出现 调用 "function1" 时,未对输出参数 "average" (可能还包括其他参数)赋值
- 如何恢复"快速启动栏"的"显示桌面"项?
- 如何使用"OpenSSL"自签证书(Self-Sign Certificate)
- 开机突然出现"NTLDR is miss"该如何处理
- 如何根据"需求及功能需要"去选择相关的"材料、型号、技术"的思考
- SQL语句如何输出两次相同的数据但是字段不一样
- GC是如何判断一个对象为"垃圾"的?被GC判断为"垃圾"的对象一定会被回收吗?
- 如何在"小公司成长"和"大公司学习"
- 如何修改android手机MTP,PTP,充电模式下 在windows电脑任务栏显示的"弹出Android","弹出MTP"提示语
- 输出字符串"asdjfsdfaskdsasdf"中有多少个“as”
- "\"反斜杠的转义--File的separator 字段