zoukankan      html  css  js  c++  java
  • tsql字符串操作

     把以前做项目时用到的字符串操作函数发出来:

    /*-----------------------------------------------------------------------------------------

    * Copyright(C) 2008  版权所有

    * 功能描述:得到字符串长度

    * 创建标识:亦心,2009年月日

    * 修改标识:

    -----------------------------------------------------------------------------------------*/

    IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].Fun_GetStrArrayLength') AND type in (N'FN', N'PC'))

        DROP FUNCTION [dbo].Fun_GetStrArrayLength

    GO

    CREATE function Fun_GetStrArrayLength 

    ( 

    @str varchar(1024), --要分割的字符串

    @split varchar(10) --分隔符号

    ) 

    returns int 

    as 

    begin 

    declare @location int 

    declare @start int 

    declare @length int 

    declare @len int

    set @len=datalength(@split)  --add

    set @str=ltrim(rtrim(@str)) 

    set @location=charindex(@split,@str) 

    set @length=1 

    while @location<>0 

    begin 

    set @start=@location+@len 

    set @location=charindex(@split,@str,@start) 

    set @length=@length+1 

    end 

    return @length 

    end

    GO

    /*-----------------------------------------------------------------------------------------

    * Copyright(C) 2008  版权所有

    * 功能描述:得到要索引的字符串

    * 创建标识:亦心,2009年月日

    * 修改标识:

    -----------------------------------------------------------------------------------------*/

    IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].Fun_GetStrArrayStrOfIndex') AND type in (N'FN', N'PC'))

        DROP FUNCTION [dbo].Fun_GetStrArrayStrOfIndex

    GO

    CREATE function Fun_GetStrArrayStrOfIndex 

    ( 

    @str varchar(1024), --要分割的字符串

    @split varchar(10), --分隔符号

    @index int --取第几个元素

    ) 

    returns varchar(1024) 

    as 

    begin 

    declare @location int 

    declare @start int 

    declare @next int 

    declare @seed int 

     

    set @str=ltrim(rtrim(@str)) 

    set @start=1 

    set @next=1 

    set @seed=datalength(@split) 

     

    set @location=charindex(@split,@str) 

    while @location<>0 and @index>@next 

    begin 

    set @start=@location+@seed 

    set @location=charindex(@split,@str,@start) 

    set @next=@next+1 

    end 

    if @location =0 select @location =datalength(@str)+1 

    --这儿存在两种情况:、字符串不存在分隔符号2、字符串中存在分隔符号,跳出while循环后,@location为,那默认为字符串后边有一个分隔符号。

    return substring(@str,@start,@location-@start) 

    end

    GO

    /*-----------------------------------------------------------------------------------------

    * Copyright(C) 2008  版权所有

    * 功能描述:得到字符串列表

    * 创建标识:亦心,2009年月日

    * 修改标识:

    -----------------------------------------------------------------------------------------*/

    if exists(select * FROM dbo.sysobjects WHERE id=object_id(N'dbo.Fun_SplitStr') AND type in (N'FN', N'PC'))

          DROP FUNCTION Fun_SplitStr

    GO

    CREATE  function Fun_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(@StrSeprate,@SourceSql,1)-1)  

      insert   @temp   values(@ch)  

      set   @SourceSql=stuff(@SourceSql,1,charindex(@StrSeprate,@SourceSql,1),'')  

                      end  

      return  

      END

      GO

    /*-----------------------------------------------------------------------------------------

    * Copyright(C) 2008  版权所有

    * 功能描述:合并处理函数

    * 创建标识:亦心,2009年月日

    * 修改标识:

    -----------------------------------------------------------------------------------------*/

    if exists(select * FROM dbo.sysobjects WHERE id=object_id(N'dbo.Fun_Join') AND type in (N'FN', N'PC'))

          DROP FUNCTION Fun_Join

    GO

    CREATE FUNCTION dbo.Fun_Join(@col1 varchar(10))

    RETURNS varchar(100)

    AS

    BEGIN

        DECLARE @re varchar(100)

        SET @re=''

        SELECT @re=@re+','+CAST(col2 as varchar)

        FROM tb

        WHERE col1=@col1

        RETURN(STUFF(@re,1,1,''))

    END

    GO

    每天进步一点点...

  • 相关阅读:
    c# 国际化国家代码
    转:Oracle Connect By用法
    函数关系: 单射 满射 双射
    python 乱码
    2010年下半年全国计算机技术与软件专业技术资格(水平)考试试题下载
    HDU1068 Girls and Boys 最大独立子集
    HDU1151 Air Raid 最小简单路径覆盖
    POJ2411 Mondriaan's Dream 状态压缩+DP
    HDU1556 方格取数(1) 状态压缩+dp
    POJ2239 Selecting Courses 二分匹配
  • 原文地址:https://www.cnblogs.com/cyan/p/1616400.html
Copyright © 2011-2022 走看看