SQL根据字符分成多列的函数

create FUNCTION [dbo].[f_splitlianxi]
(
@str NVARCHAR(500),--要分割的字符串
@fengefu NVARCHAR(20)--进行分割的符号
)RETURNS @table TABLE(id INT,val NVARCHAR(50))
AS
BEGIN 
    DECLARE @index INT,@startsplit INT,@id INT --@index分隔符所在的位置的下标 @startsplit 每次分割开始的位置
    SELECT @index=CHARINDEX(@fengefu,@str),@startsplit=1,@id=1
    WHILE @index>0
    BEGIN
        IF @id>1  --第一次循环之后 都执行这个方法体中的代码
        BEGIN 
            SELECT @startsplit=@index+LEN(@fengefu) --分割开始位置等于 之前的字符下标位置+字符本身的长度
            SELECT @index=CHARINDEX(@fengefu,@str,@startsplit)
            
        END 
        IF @index>0   --第一次循环 截取位置从@startsplit=1开始  
            BEGIN 
                INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,@index-@startsplit)) --要截取的字符串   开始位置  要截取的长度
            END 
        ELSE 
        BEGIN   --最后一次循环  此时由于匹配不到分割字符 @index=0 截取剩余的字符串
            INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,LEN(@str)-@startsplit+1))
        END 
        SELECT @id=@id+1
    END
    RETURN 
END

调用方法

select val from f_splitlianxi(字段名,分切符号) where id=1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值