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

  • 相关阅读:
    【SAS NOTE】OUTPUT
    【SAS NOTES】_NULL_
    【SAS NOTE】sas 9.2 安装
    【SAS NOTE】FREQ
    纯数学教程 Page 203 例XLI (1)
    纯数学教程 Page 203 例XLI (3)
    纯数学教程 Page 203 例XLI (2)
    Prove Cauchy's inequality by induction
    纯数学教程 Page 325 例LXVIII (15) 调和级数发散
    纯数学教程 Page 325 例LXVIII (15) 调和级数发散
  • 原文地址:https://www.cnblogs.com/lgxll/p/2748108.html
Copyright © 2011-2022 走看看