一、说明
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