SQL根据字符分割字符串的三种写法
2016-04-05 21:34
555 查看
go
--创建函数(第一版)
create function [dbo].[m_split](@c varchar(2000),@split varchar(2))
returns @t table(col varchar(200))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
--下面两种是在论坛看到高手们发的
go
--创建函数(第二版)(fredrickhu(小F))
create function [dbo].[f_split](@s varchar(8000), @split varchar(10) )
returns table
as
return
(select substring(@s,number,charindex(@split,@s+@split,number)-number)as col
from master..spt_values
where type='p' and number<=len(@s+'a')
and charindex(@split,@split+@s,number)=number)
go
--创建函数(第三版)(dawugui(爱新觉罗.毓华))
create function [dbo].[d_split] (@inputstr varchar(8000),@seprator varchar(10))
returns @temp table (a varchar(200))
as
begin
declare @i int
set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)
while @i >= 1
begin
insert @temp values(left(@inputstr, @i - 1))
set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
end
if @inputstr <> '/'
insert @temp values(@inputstr)
return
end
--测试示例
declare @sql varchar(20)
set @sql='A,B,C,D,E'
select * from dbo.m_split(@sql,',')
select * from dbo.f_split(@sql,',')
select * from dbo.d_split(@sql,',')
--运行结果(结果是相同的)
/*
col
---------
A
B
C
D
E
*/
--创建函数(第一版)
create function [dbo].[m_split](@c varchar(2000),@split varchar(2))
returns @t table(col varchar(200))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
--下面两种是在论坛看到高手们发的
go
--创建函数(第二版)(fredrickhu(小F))
create function [dbo].[f_split](@s varchar(8000), @split varchar(10) )
returns table
as
return
(select substring(@s,number,charindex(@split,@s+@split,number)-number)as col
from master..spt_values
where type='p' and number<=len(@s+'a')
and charindex(@split,@split+@s,number)=number)
go
--创建函数(第三版)(dawugui(爱新觉罗.毓华))
create function [dbo].[d_split] (@inputstr varchar(8000),@seprator varchar(10))
returns @temp table (a varchar(200))
as
begin
declare @i int
set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)
while @i >= 1
begin
insert @temp values(left(@inputstr, @i - 1))
set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
end
if @inputstr <> '/'
insert @temp values(@inputstr)
return
end
--测试示例
declare @sql varchar(20)
set @sql='A,B,C,D,E'
select * from dbo.m_split(@sql,',')
select * from dbo.f_split(@sql,',')
select * from dbo.d_split(@sql,',')
--运行结果(结果是相同的)
/*
col
---------
A
B
C
D
E
*/
相关文章推荐
- Navicat for Oracle Cannot load OCI DLL,126
- 彻底卸载oracle数据库
- Azure Redis
- Host 'thinkive-PC' is not allowed to connect to this MySQL server错误解决办法
- SQL函数实现综合模糊查询
- MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限
- SQL语句 SELECT LIKE like用法详解
- 浅谈SQL注入基础
- 第一章:MySql数据库入门
- redis(三)--Java代码-telnet可以连接成功但是出现Connect timeout问题-解决方案
- TimesTen数据库的备份和恢复
- mysql创建自定义函数
- SQL Sever——无法连接到(local)。“未配置远程连接”和“请求失败或服务未及时响应”
- 如何向数据库插入带有单引号(')的字符串?
- 数据库连接jndi
- Mysql 不同版本 说明
- SQLite数据库的运用:
- SQL语言基础入门总结
- MySQL添加分区添加索引
- 从其他主机登陆mysql提示不允许连接的解决办法