自定义函数之分割函数

一、说明

SQL中没有现成的切割函数,如果想求两个分号之间的字符串则要要很长的代码,因此,自定义了这样的函数。

二、代码展示

USE [test]
GO
/****** Object:  UserDefinedFunction [qiansl].[splitl]    Script Date: 2021/1/4 20:36:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
CREATE  FUNCTION [qiansl].[splitl]
(
    @String VARCHAR(MAX),     -- 要切分的字符串
    @Delimiter VARCHAR(MAX),  -- 切分的标识
    @Num int                  -- 第几个标识
) 
RETURNS  VARCHAR(MAX) 
AS
BEGIN
    DECLARE @idx INT=1             --  字符串位置
    DECLARE @slice VARCHAR(MAX)    --  切分后的各部分
    DECLARE @id  INT=1             --  递增,作为唯一标识
    DECLARE @temptable TABLE (id int,items VARCHAR(MAX))  -- 将切分的各部分按顺序保存到的表格               
    DECLARE @result VARCHAR(MAX)   -- 需要的结果
    IF LEN(@String) < 1 OR LEN(ISNULL(@String,'')) = 0
        RETURN NULL
    WHILE @idx != 0
    BEGIN
        SET @idx = CHARINDEX(@Delimiter,@String)

        IF @idx != 0
            SET @slice = LEFT(@String,@idx - 1)  -- 将距离最左边的标识前字符串取出
        ELSE
            SET @slice = @String

        IF LEN(@slice) >= 0
            INSERT INTO @temptable(id,items) VALUES(@id,@slice)   -- 将最左边的标识前字符串按顺序插入到表格
            SET @id =@id +1          
        SET @String = RIGHT (@String, LEN(@String) - @idx)        -- 剔除最左边的标识前字符串        
        IF LEN(@String) = 0
            BREAK
    END    
    SELECT @result = items from @temptable where id = @Num 
    RETURN  @result


/*
演示:
SELECT qiansl.splitl('first;second;third',';',2)
结果:second



*/

END

三、效果展示

原文地址:https://www.cnblogs.com/qianslup/p/14232972.html