快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

SQL中自己创建函数,分割字符串

if exists (select * from dbo.sysobjects where id = object_id(N\\\'[dbo].[getEPnum]\\\') and xtype in (N\\\'FN\\\', N\\\'IF\\\', N\\\'TF\\\'))
drop function [dbo].[getEPnum]
GO

if exists (select * from dbo.sysobjects where id = object_id(N\\\'[dbo].[getstrcount]\\\') and xtype in (N\\\'FN\\\', N\\\'IF\\\', N\\\'TF\\\'))
drop function [dbo].[getstrcount]
GO

if exists (select * from dbo.sysobjects where id = object_id(N\\\'[dbo].[getstrofindex]\\\') and xtype in (N\\\'FN\\\', N\\\'IF\\\', N\\\'TF\\\'))
drop function [dbo].[getstrofindex]
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO



--- 这个函数直接调用了另外的两个函数,可以先阅读下面提到的两个函数
CREATE function getEPnum (@str varchar(8000))
returns varchar(8000)
as
begin
declare @str_return varchar(8000)
declare @i int
declare @temp_i int
declare @onlineornot int
declare @findepnumok int

-- 用来取得一个epnum,
-- 规则:首先从chatid中取,假如有在线得,则取得最前面得在线得返回
-- 假如全部不在线,则返回 ‘00000000’

select @findepnumok = 0
select @temp_i = 0

IF len(@str)<=0
begin
SELECT @str_return = \\\'00000000\\\'
end
else
begin
select @i = dbo.getstrcount(@str,\\\',\\\')

WHILE @temp_i< @i
BEGIN
select @onlineornot = online from wwchat_user where epnum=dbo.getstrofindex(@str,\\\',\\\',@temp_i)
IF (@onlineornot=1)
begin
select @str_return =dbo.getstrofindex(@str,\\\',\\\',@temp_i)
select @findepnumok = 1 --找到epnum后置为1
BREAK
end
ELSE
begin
select @temp_i = @temp_i + 1
select @findepnumok = 0 --找不到epnum后置为1
end
END

if @findepnumok = 0
begin
SELECT @str_return = \\\'00000000\\\'
end
end

return @str_return
end


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO



-- getstrcount 输入一个没有分割的字符串,以及分割符
--返回数组的个数

CREATE function getstrcount (@str varchar(8000),@splitstr varchar(100))
--returns varchar(8000)
returns int
as
begin
declare @int_return int
declare @start int
declare @next int

declare @location int

select @next = 0
select @location = 1


if len(@str)<len(@splitstr)
select @int_return =0
if charindex(@splitstr,@str) = 0
select @int_return =0

while (@location<>0)
begin
select @start = @location + 1
select @location = charindex(@splitstr,@str,@start)
select @next = @next + 1
select @int_return = @next

end

return @int_return
end




GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO



-- getstrofindex 输入一个未分割的字符串,舒适分割符号,舒适要取得的字符位置
-- 返回 制定位置的字符串
CREATE function getstrofindex (@str varchar(8000),@splitstr varchar(4),@index int=0)
returns varchar(8000)
as
begin
declare @str_return varchar(8000)
declare @start int
declare @next int
declare @location int

select @start =1
select @next = 1 --假如习惯从0开始则select @next =0
select @location = charindex(@splitstr,@str,@start)
while (@location <>0 and @index > @next )

begin
select @start = @location +1
select @location = charindex(@splitstr,@str,@start)
select @next =@next +1
end

if @location =0 select @location =len(@str)+1 --假如是因为没有逗号退出,则认为逗号在字符串后
select @str_return = substring(@str,@start,@location -@start) --@start肯定是逗号之后的位置或者就是初始值1
if (@index <> @next ) select @str_return = \\\'\\\' --假如二者不相等,则是因为逗号太少,或者@index小于@next的初始值1。

return @str_return
end


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
返回类别: 教程
上一教程: 如何实现MYSQL中的用户治理
下一教程: SQL SEVER 2000的系统数据库和索引

您可以阅读与"SQL中自己创建函数,分割字符串"相关的教程:
· MYSQL的字符串函数
· 几个测试SQL,测试SQL处理字符串
· SQL自定义函数的应用
· MYSQL MAX版本如何修改默认字符集
· SQL SERVER和ORACLE常用函数对比
    微笑服务 优质保证 索取样品