SQL中实现SPLIT函数几种方法

例1

 代码如下 复制代码

create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(a varchar(100))
--实现split功能 的函数
--date    :2003-10-14
as
begin
    declare @i int
    set @SourceSql=rtrim(ltrim(@SourceSql))
    set @i=charindex(@StrSeprate,@SourceSql)
    while @i>=1
    begin
        insert @temp values(left(@SourceSql,@i-1))
        set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
        set @i=charindex(@StrSeprate,@SourceSql)
    end
    if @SourceSql<>''
       insert @temp values(@SourceSql)
    return
end

select * from dbo.f_split('1,2,3,4',',')

a                                                                                                   
--------------------
1
2
3
4

(所影响的行数为 4 行)

例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

Sql2000andSql2005实用的Split函数

 

 代码如下 复制代码
sql2000
CREATE  FUNCTION [dbo].[splitstring_array]
(
    @string nvarchar(4000),@split char(1)
)
 
RETURNS @array table

    oneStr nvarchar(100)
)
 
AS
 
BEGIN
  declare @v_code varchar(60)
   
  --zell 2006-05-26
  --set @string = replace(@string,' ',@split)
  --set @string = replace(@string,',',@split)
 
  while len(@string) > 0
    begin
      if charindex(@split,@string,1) != 0
         begin
           set @v_code = substring(@string,1,charindex(@split,@string,1)-1)
           set @string = substring(@string,charindex(@split,@string,1)+1,len(@string))
         end
      else if charindex(@split,@string,1) = 0
         begin
           set @v_code = @string
           set @string = ''
         end
      insert into @array(onestr) values(@v_code)
    end
  RETURN
END
 
sql2005
CREATE function [dbo].[func_splitid]
(@str varchar(max),@split varchar(10))
RETURNS @t Table (c1 nvarchar(100))
AS
BEGIN
    DECLARE @x XML
    SET @x = CONVERT(XML,'<items><item id="' + REPLACE(@str, @split, '"/><item id="') + '"/></items>')
    INSERT INTO @t SELECT x.item.value('@id[1]', 'nvarchar(100)') FROM @x.nodes('//items/item') AS x(item)
    RETURN
END
时间: 2024-08-09 00:28:49

SQL中实现SPLIT函数几种方法的相关文章

SQL中实现SPLIT函数几种方法总结(必看篇)_Mysql

例1 代码如下 create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10)) returns @temp table(a varchar(100)) --实现split功能 的函数 --date :2003-10-14 as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@Sou

举例详解Python中的split()函数的使用方法_python

函数:split() Python中有split()和os.path.split()两个函数,具体作用如下: split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list) os.path.split():按照路径将文件名和路径分割开 一.函数说明1.split()函数 语法:str.split(str="",num=string.count(str))[n] 参数说明: str:   表示为分隔符,默认为空格,但是不能为空('').若字符串中没有分隔

MySQL中优化sql语句查询常用的30种方法

本篇文章是对MySQL中优化sql语句查询常用的30种方法进行了详细的分析介绍,需要的朋友参考下   1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以

Javascript中split函数的使用方法说明

 本篇文章主要是对js中split函数的使用方法进行了说明介绍,需要的朋友可以过来参考下,希望对大家有所帮助 split split与join作用相反,用于把一个字符串分割成字符串数组. stringObject.split(a,b)这是它的语法.   a是必须的 决定从a这分割. b不是必须的,可选.该参数可指定返回的数组的最大长度 .如果设置了该参数,返回的子串不会多于这个参数指定的数组.如果没有设置该参数,整个字符串都会被分割,不   考虑它的长度.   注意返回的数组中不包括a本身:  

SQL Server 优化存储过程的七种方法

原文:SQL Server 优化存储过程的七种方法 优化存储过程有很多种方法,下面介绍最常用的7种. 1.使用SET NOCOUNT ON选项 我们使用SELECT语句时,除了返回对应的结果集外,还会返回相应的影响行数.使用SET NOCOUNT ON后,除了数据集就不会返回额外的信息了,减小网络流量. 2.使用确定的Schema 在使用表,存储过程,函数等等时,最好加上确定的Schema.这样可以使SQL Server直接找到对应目标,避免去计划缓存中搜索.而且搜索会导致编译锁定,最终影响性能

sql中实现split()功能

原文:sql中实现split()功能 http://www.cnblogs.com/yangyy753/archive/2011/11/23/2260618.html 数据库中,总是遇到一些字段内容,想根据某个标识截取一下字符串,可是都想不到好办法,如果能有一个像ASP.NET里面的Split方法,那该多好,多方便啊! 为什么不可以?我们自己写一个函数不就可以解决了吗?好吧,说干就干,自己来写个SplitString函数! SET ANSI_NULLS ON GO SET QUOTED_IDEN

SQL SERVER日志清除的两种方法

server SQL SERVER日志清除的两种方法方法一 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大1.设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项--&g

时间类型的转换,SQL中CONVERT转化函数的用法

函数|转换 SQL中CONVERT转化函数的用法 格式:CONVERT(data_type,expression[,style]) 说明:此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候才用到. 例子:SELECT CONVERT(varchar(30),getdate(),101) now结果为:now---------------------------------------|09/15

PHP删除数组中特定元素的两种方法

这篇文章介绍了PHP中删除数组中特定元素的两种方法,有需要的朋友可以参考一下   方法一: 复制代码 代码如下: <?php $arr1 = array(1,3, 5,7,8); $key = array_search(3, $arr1); if ($key !== false)     array_splice($arr1, $key, 1); var_dump($arr1); ?> 输出: array(4) { [0]=> int(1) [1]=> int(5) [2]=>