zoukankan      html  css  js  c++  java
  • 自定义函数之分割函数

    一、说明

    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

    三、效果展示

  • 相关阅读:
    hdu5628 Clarke and math
    LOJ#2452. 「POI2010」反对称 Antisymmetry
    LOJ#2444. 「NOI2011」阿狸的打字机
    BZOJ2795: [Poi2012]A Horrible Poem
    LOJ#2427. 「POI2010」珍珠项链 Beads
    云主机文件系统readonly处理案例
    兼容性测试中如何切换和管理多个JDK版本
    Promise之你看得懂的Promise
    一次MySQL线上慢查询分析及索引使用
    考拉消息中心消息盒子处理重构(策略模式)
  • 原文地址:https://www.cnblogs.com/qianslup/p/14232972.html
Copyright © 2011-2022 走看看