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、仅支持文本字符串分隔!!!

    完美,只是因为简单。
  • 相关阅读:
    晶振及COMS电路
    笔记16 C# typeof() & GetType()
    笔记15 修饰符
    笔记14 数据库编程技术
    C#基础知识
    C#连接数据库
    笔记13 winform
    笔记12 export to excel (NPOI)
    笔记11 export to excel
    笔记10
  • 原文地址:https://www.cnblogs.com/jschar/p/6142177.html
Copyright © 2011-2022 走看看