设为首页 收藏本站
查看: 1195|回复: 0

[经验分享] 几个SQL Server split自定义函数使用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-2-18 10:42:04 | 显示全部楼层 |阅读模式
本文章来给大家总结几个很不错的SQL Server split自定义函数了,这个函数就是字符分割函数了,在sql server中没有这个函数哦。
例1,要求取得字符串aa,dd,cc,rr,fff中某个位置的字符串,如果在C#或Java很容易通过Split来实现,但是在Sql Server中就没有直接提供Split这个函数。
当然,此类问题总是可以解决的。
代码如下       
ALTER function [dbo].[core_split]
(
@str varchar(100),
@split char(1),
@index int
)
returns varchar(10) as
begin
declare @count int
declare @s varchar(10)
set @count = 0;
set @s = ''
while(charindex(@split,@str)<>0)
begin
if @count = @index begin
set @s = substring(@str,1,charindex(@split,@str)-1)
break
end
set @str = stuff(@str,1,charindex(@split,@str),'')
set @count = @count + 1
end
if charindex(@split,@str)=0 begin
set @s = @str
end
return @s
end
例如
代码如下       
select dbo.core_split('aa,ss,ee,rr,da,tt',',',1)
就可获得ss
例2
代码如下       
--SQL Server Split函数
--Author:zc_0101
--说明:
--支持分割符多字节
--使用方法
--Select * FROM DBO.F_SQLSERVER_SPLIT('1203401230105045','0')   
--select * from DBO.F_SQLSERVER_SPLIT('abc1234a12348991234','1234')
--Select * from DBO.F_SQLSERVER_SPLIT('ABC',',')   

CREATE FUNCTION F_SQLSERVER_SPLIT(@Long_str varchar(8000),@split_str varchar(100))   
RETURNS  @tmp TABLE(        
    ID          inT     IDENTITY PRIMARY KEY,      
    short_str   varchar(8000)   
)   
AS   
BEGIN   
    DECLARE @long_str_Tmp varchar(8000),@short_str varchar(8000),@split_str_length int   
    SET @split_str_length = LEN(@split_str)   
    IF CHARINDEX(@split_str,@Long_str)=1
         SET @long_str_Tmp=SUBSTRING(@Long_str,@split_str_length+1,LEN(@Long_str)-@split_str_length)
    ELSE
         SET @long_str_Tmp=@Long_str
    IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1   
        SET @long_str_Tmp=@long_str_Tmp+@split_str   
    ELSE   
        SET @long_str_Tmp=@long_str_Tmp   
    IF CHARINDEX(@split_str,@long_str_Tmp)=0
        Insert INTO @tmp select @long_str_Tmp
    ELSE
        BEGIN
            WHILE CHARINDEX(@split_str,@long_str_Tmp)>0   
                BEGIN   
                    SET @short_str=SUBSTRING(@long_str_Tmp,1,CHARINDEX(@split_str,@long_str_Tmp)-1)   
                    DECLARE @long_str_Tmp_LEN INT,@split_str_Position_END int   
                    SET @long_str_Tmp_LEN = LEN(@long_str_Tmp)   
                    SET @split_str_Position_END = LEN(@short_str)+@split_str_length   
                    SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,@long_str_Tmp_LEN-@split_str_Position_END))
                    IF @short_str<>'' Insert INTO @tmp select @short_str   
                END           
        END
    RETURN     
END
例3
代码如下       
=====================
--Author:    <myxbing>
--Createdate:  <2007/8/18>
-- Description:  <拆分字符串函数>
--=============================================
CREATE FUNCTION[dbo].[Split]
(
@SplitString varchar(8000),-- nvarchar(4000)
@Separatorvarchar(2)=','
)
RETURNS@SplitStringsTableTABLE
(
[id]intidentity(1,1),
[value]varchar(8000)-- nvarchar(4000)
)
AS
BEGIN
  DECLARE@CurrentIndexint;
  DECLARE@NextIndexint;
  DECLARE@ReturnTextvarchar(8000);-- nvarchar(4000)
  SELECT@CurrentIndex=1;
  WHILE(@CurrentIndex<=len(@SplitString))
  BEGIN
    SELECT@NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
    IF(@NextIndex=0OR@NextIndexISNULL)
      SELECT@NextIndex=len(@SplitString)+1;

    SELECT@ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
    INSERTINTO@SplitStringsTable([value])
    VALUES(@ReturnText);

    SELECT@CurrentIndex=@NextIndex+1;
  END
  RETURN;
END


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-15019-1-1.html 上篇帖子: SQL中xp_cmdshell开启和关闭详解 下篇帖子: sqlserver substring函数用法小结 加密
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表