zoukankan      html  css  js  c++  java
  • SQL分隔字符串

    创建函数:

    CREATE FUNCTION[dbo].[split](@str NVARCHAR(max),@spliter NVARCHAR(10))
    --@str:目标字符串
    --@spliter:分隔符
    RETURNS @tb TABLE(ch NVARCHAR(max))
    AS
    BEGIN
    DECLARE @Num INT,@Pos INT, @NextPos INT
    SET @Num = 0
    SET @Pos = 1
    WHILE(@Pos <= LEN(@str))
    BEGIN
    SELECT @NextPos = CHARINDEX(@spliter, @str, @Pos)
    IF (@NextPos = 0 OR @NextPos IS NULL)
    SELECT @NextPos = LEN(@str) + 1
    INSERT INTO @tb VALUES(RTRIM(LTRIM(SUBSTRING(@str, @Pos, @NextPos - @Pos))))
    SELECT @Pos = @NextPos+1
    END
    RETURN
    END
    GO

    使用方式:

    SELECT * FROM dbo.split('1,2,3,4',',') --注:多行单列的数据表

    测试语句:

    IF object_id(N'[dbo].[split]') IS NOT NULL --检查函数【[dbo].[split]】是否存在
    BEGIN
        DROP FUNCTION [dbo].[split] --删除函数
    END
    GO
    
    
    CREATE FUNCTION[dbo].[split](@str NVARCHAR(max),@spliter NVARCHAR(10))
    --@str:目标字符串
    --@spliter:分隔符
    RETURNS @tb TABLE(ch NVARCHAR(max))
    AS
    BEGIN
    DECLARE @Num INT,@Pos INT, @NextPos INT
    SET @Num = 0
    SET @Pos = 1
    WHILE(@Pos <= LEN(@str))
    BEGIN
    SELECT @NextPos = CHARINDEX(@spliter, @str, @Pos)
    IF (@NextPos = 0 OR @NextPos IS NULL)
    SELECT @NextPos = LEN(@str) + 1
    INSERT INTO @tb VALUES(RTRIM(LTRIM(SUBSTRING(@str, @Pos, @NextPos - @Pos))))
    SELECT @Pos = @NextPos+1
    END
    RETURN
    END
    GO
    
    SELECT * FROM dbo.split('1,2,3,4',',')
    
    DROP FUNCTION [dbo].[split]
    GO

    说明:

      1、仅支持文本字符串分隔!!!

    完美,只是因为简单。
  • 相关阅读:
    2018/12/08 L1-043 阅览室 Java
    2018/12/08 L1-042 日期格式化 Java
    breeze源码阅读心得
    Spark ML源码分析之四 树
    Spark ML源码分析之三 分类器
    Spark ML源码分析之二 从单机到分布式
    Spark ML源码分析之一 设计框架解读
    Adaboost的意义
    RBM如何训练?
    ChromeTimeline
  • 原文地址:https://www.cnblogs.com/jschar/p/6142177.html
Copyright © 2011-2022 走看看