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

    完美,只是因为简单。
  • 相关阅读:
    谈谈vertical-align的text-bottom和text-top
    【golang】代码学习
    【golang】json相关:unmarshal
    【tidb】相关的调研
    【php】sort函数整理
    【hive学习笔记1】-开始
    python2和python3区别
    python: 类型转换(int,long,float->string)
    【java】查找应用程序的资源
    【java】已经学习的部分
  • 原文地址:https://www.cnblogs.com/jschar/p/6142177.html
Copyright © 2011-2022 走看看