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

    完美,只是因为简单。
  • 相关阅读:
    vue中路由跳转传递参数
    父组件向子孙组件传递数据provide/inject
    微信、QQ等内置浏览器定位失败
    Java ArrayList类
    java 生成 [1, n] 之间的随机数
    Java 构造方法
    Java this关键字
    Java private关键字及作用
    Java 随笔
    Java 内存划分
  • 原文地址:https://www.cnblogs.com/jschar/p/6142177.html
Copyright © 2011-2022 走看看