在SQL语句中实现split函数

本文介绍了一种使用T-SQL在SQL Server中将逗号分隔的字符串拆分为单独值的方法。通过定义变量并利用CHARINDEX和SUBSTRING函数,可以有效地逐个提取字符串中的每个元素。
declare @str varchar(8000),@start int,@end int
set @str = 'I,am,derry,'  --如果输入串不是以分割字符结尾,则 set @str = @str+‘,’

set @start = 1
set @end = charindex(',',@str,@start)  --第一次出现分割字符的下标位置
while(@end<>0)
    begin
        print substring(@str,@start,@end-@start)  --输出成员;(
@end-@start)的值等于成员的长度,不包含分割字符。
        set @start = @end+1
        set @end = charindex(',',@str,@start)  --输出最后一个成员后,
@end =0,则退出循环。
    end

转载于:https://www.cnblogs.com/hailibu/archive/2008/04/29/1175860.html

### 关于SQL中的Split函数SQL中,虽然不像其他编程语言(如C#或JavaScript)那样内置了一个标准的`Split`函数来处理字符串分割操作,但在某些数据库管理系统(DBMS),比如Microsoft SQL Server,提供了不同的方式来实现这一功能。 #### 方法一:自定义SQL Split函数 如果需要手动创建一个类似于`Split`的功能,可以编一个用户定义函数 (UDF),用于将字符串按照指定分隔符拆分成多个部分。这种方式适用于较旧版本的SQL Server或其他不支持内置`STRING_SPLIT`函数的环境[^1]: ```sql CREATE FUNCTION dbo.Split (@Delimiter char(1), @InputString nvarchar(MAX)) RETURNS @OutputTable TABLE ( Item NVARCHAR(MAX) ) AS BEGIN DECLARE @StartIndex INT, @EndIndex INT SET @StartIndex = 1 IF LEN(@InputString) < 1 OR @InputString IS NULL RETURN WHILE @StartIndex > 0 BEGIN SET @EndIndex = CHARINDEX(@Delimiter, @InputString, @StartIndex) IF @EndIndex < @StartIndex SET @EndIndex = LEN(@InputString) + 1 INSERT INTO @OutputTable(Item) VALUES(SUBSTRING(@InputString, @StartIndex, @EndIndex - @StartIndex)) SET @StartIndex = @EndIndex + 1 END RETURN END; ``` 调用此函数的方式如下所示: ```sql SELECT * FROM dbo.Split(',', '001,002,003,004'); ``` 这种方法允许开发者灵活控制输入参数以及返回的结果集结构。 #### 方法二:利用SQL Server自带的STRING_SPLIT函数 对于运行在SQL Server 2016及以上版本上的应用程序来说,可以直接使用微软官方提供的`STRING_SPLIT`表值函数来进行简单的字符串拆分工作[^3]。该函数接受两个参数——待切割的目标串和作为标志位使用的单字符型定界符,并最终以表格形式输出每一个被分开的小片段。 示例查询语句如下: ```sql SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' '); ``` 需要注意的是,尽管这个方法简单易用,但它并不完全等同于传统意义上的数组或者列表概念下的split行为,因为它仅能生成单一列的数据集合而无法附加额外属性信息给每一条记录项。 综上所述,在不同场景下可以选择适合自己的解决方案完成对字符串按特定规则解析的需求。如果是针对现代版次较高的SQL Server实例,则优先考虑采用更高效便捷的内置工具;反之则需自行构建逻辑满足业务需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值