zoukankan      html  css  js  c++  java
  • sql server split 分割 两种方法

    CREATE FUNCTION Split(@Text NVARCHAR(4000),@Sign NVARCHAR(4000))  
    RETURNS @tempTable TABLE(id INT IDENTITY(1,1) PRIMARY KEY,[VALUE] NVARCHAR(4000))  
    AS  
    BEGIN  
        DECLARE @StartIndex INT                --开始查找的位置  
        DECLARE @FindIndex INT                --找到的位置  
        DECLARE @Content    VARCHAR(4000)    --找到的值  
        --初始化一些变量  
        SET @StartIndex = 1 --T-SQL中字符串的查找位置是从1开始的  
        SET @FindIndex=0  
          
        --开始循环查找字符串逗号  
        WHILE(@StartIndex <= LEN(@Text))  
        BEGIN  
            --查找字符串函数 CHARINDEX 第一个参数是要找的字符串  
            --                            第二个参数是在哪里查找这个字符串  
            --                            第三个参数是开始查找的位置  
            --返回值是找到字符串的位置  
            SELECT @FindIndex = CHARINDEX(@Sign,@Text,@StartIndex)  
            --判断有没找到 没找到返回0  
            IF(@FindIndex =0 OR @FindIndex IS NULL)  
            BEGIN  
                --如果没有找到者表示找完了  
                SET @FindIndex = LEN(@Text)+1  
            END  
            --截取字符串函数 SUBSTRING 第一个参数是要截取的字符串  
            --                            第二个参数是开始的位置  
            --                            第三个参数是截取的长度  
            --@FindIndex-@StartIndex 表示找的的位置-开始找的位置=要截取的长度  
            --LTRIM 和 RTRIM 是去除字符串左边和右边的空格函数  
            SET @Content = LTRIM(RTRIM(SUBSTRING(@Text,@StartIndex,@FindIndex-@StartIndex)))  
            --初始化下次查找的位置  
            SET @StartIndex = @FindIndex+1  
            --把找的的值插入到要返回的Table类型中  
            INSERT INTO @tempTable ([VALUE]) VALUES (@Content)   
        END  
        RETURN  
    END

    ************************************************************************************************

    USE [WFITWeb]
    GO
    /****** Object:  UserDefinedFunction [dbo].[UF_StrSplit]    Script Date: 10/31/2012 14:47:28 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER FUNCTION [dbo].[UF_StrSplit]
    (
       @p_strmore        VARCHAR(8000),
       @p_strdelimieter  VARCHAR(10)
    )
    RETURNS @RETURN_TABLE TABLE
    (
      IDX INT IDENTITY(1,1),
      VALUE_STR VARCHAR(500)
    )
    AS
    BEGIN
     DECLARE @lv_index     INT
     DECLARE @lv_delLength INT
     DECLARE @lv_strValue  VARCHAR(1000)

     SET @lv_delLength = LEN(@p_strdelimieter)

     WHILE LEN(@p_strmore) > 0
     BEGIN
       SET @lv_index = CHARINDEX(@p_strdelimieter, @p_strmore)
       IF (@lv_index=0)
       BEGIN
        INSERT @RETURN_TABLE(VALUE_STR) VALUES (@p_strmore)
        RETURN
       END
       ELSE IF (@lv_index=1)
       BEGIN
        SET @p_strmore = SUBSTRING(@p_strmore, @lv_delLength+1, LEN(@p_strmore))
        CONTINUE
       END

       SET @lv_strValue = SUBSTRING(@p_strmore, 0, @lv_index)
       SET @p_strmore = SUBSTRING(@p_strmore, @lv_index+@lv_delLength, LEN(@p_strmore)-@lv_index)
       INSERT @RETURN_TABLE(VALUE_STR) VALUES (@lv_strValue)
      END

     RETURN

    END

  • 相关阅读:
    Codeforces 845E Fire in the City 线段树
    Codeforces 542D Superhero's Job dp (看题解)
    Codeforces 797F Mice and Holes dp
    Codeforces 408D Parcels dp (看题解)
    Codeforces 464D World of Darkraft
    Codeforces 215E Periodical Numbers 容斥原理
    Codeforces 285E Positions in Permutations dp + 容斥原理
    Codeforces 875E Delivery Club dp
    Codeforces 888F Connecting Vertices 区间dp (看题解)
    Codeforces 946F Fibonacci String Subsequences dp (看题解)
  • 原文地址:https://www.cnblogs.com/lgxll/p/2748108.html
Copyright © 2011-2022 走看看