SQL里面用自定义Split()完成个性化需求

 更新时间:2013年02月21日 15:06:14   作者:  
为了满足需求自定义Split()在SQL中实现,代码很整洁,感兴趣的朋友可以参考下,或许对你学习sql语句有所帮助
复制代码 代码如下:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE function [dbo].[SplitString]
(
@Input nvarchar(max),
@Separator nvarchar(max)=',',
@RemoveEmptyEntries bit=1
)
returns @TABLE table
(
[Id] int identity(1,1),
[Value] nvarchar(max)
)
as
begin
declare @Index int, @Entry nvarchar(max)
set @Index = charindex(@Separator,@Input)
while (@Index>0)
begin
set @Entry=ltrim(rtrim(substring(@Input, 1, @Index-1)))
if (@RemoveEmptyEntries=0) or (@RemoveEmptyEntries=1 and @Entry<>'')
begin
insert into @TABLE([Value]) Values(@Entry)
end
set @Input = substring(@Input, @Index+datalength(@Separator)/2, len(@Input))
set @Index = charindex(@Separator, @Input)
end
set @Entry=ltrim(rtrim(@Input))
if (@RemoveEmptyEntries=0) or (@RemoveEmptyEntries=1 and @Entry<>'')
begin
insert into @TABLE([Value]) Values(@Entry)
end
return
end

函数、表都建好了,下面调用测试一下吧:
复制代码 代码如下:

declare @str1 varchar(max), @str2 varchar(max), @str3 varchar(max)
set @str1 = '1,2,3'
set @str2 = '1###2###3'
set @str3 = '1###2###3###'
select [Value] from [dbo].[SplitString](@str1, ',', 1)
select [Value] from [dbo].[SplitString](@str2, '###', 1)
select [Value] from [dbo].[SplitString](@str3, '###', 0)

结果,截个图来看一下:

相关文章

  • SQL集合函数中case when then 使用技巧

    SQL集合函数中case when then 使用技巧

    我们都知道SQL中适用case when then来转化数据库中的信息 比如 select (case sex when 0 then '男' else '女' end) AS sex from studentInfo
    2011-09-09
  • SQL Server事务日志文件过大(已满)的解决方案

    SQL Server事务日志文件过大(已满)的解决方案

    随着数据库使用时间增长,日志文件也在不停的增大,这篇文章主要给大家介绍了关于SQL Server事务日志文件过大(已满)的解决方案,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • hive中将string数据转为bigint的操作

    hive中将string数据转为bigint的操作

    这篇文章主要介绍了hive中将string数据转为bigint的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • sqlserver 禁用触发器和启用触发器的语句

    sqlserver 禁用触发器和启用触发器的语句

    sqlserver 禁用触发器和启用触发器的语句,有需要的朋友可以试试。
    2009-09-09
  • SqlServer数据库提示 “tempdb” 的日志已满 问题解决方案

    SqlServer数据库提示 “tempdb” 的日志已满 问题解决方案

    本文主要讲述了笔者在执行sql语句的过程中,遇到提示“数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。”的解决过程,希望对大家有所帮助
    2014-08-08
  • SQL Server2019安装的详细步骤实战记录(亲测可用)

    SQL Server2019安装的详细步骤实战记录(亲测可用)

    SQL Server 2019作为编程人员必须使用到的一款数据库管理软件,许多初学者在安装这款软件的时候都出现了各种各样的问题,下面这篇文章主要给大家介绍了关于SQL Server2019安装的详细步骤,需要的朋友可以参考下
    2022-06-06
  • SQLSERVER 临时表和表变量的区别汇总

    SQLSERVER 临时表和表变量的区别汇总

    不管临时表还是表变量都带了表这个词,既然提到表 ,按推理自然会落到某数据库中,如果真在一个数据库中,那自然就有它的存储文件 .mdf和.ldf,那是不是如我推理的那样呢,这篇文章主要介绍了SQLSERVER 临时表和表变量到底有什么区别,需要的朋友可以参考下
    2023-02-02
  • SQL中的连接查询详解

    SQL中的连接查询详解

    本文详细讲解了SQL中的连接查询,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Sqlserver timestamp数据类使用介绍

    Sqlserver timestamp数据类使用介绍

    SQL Server timestamp 数据类型与时间和日期无关。SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序。
    2011-08-08
  • sqlserver、mysql获取连接字符串步骤

    sqlserver、mysql获取连接字符串步骤

    这篇文章主要介绍了sqlserver、mysql获取连接字符串步骤,需要的朋友可以参考下
    2014-07-07

最新评论