zoukankan      html  css  js  c++  java
  • SQL Server通过函数把逗号分隔的字符串拆分成数据列表的脚本-干货


    CREATE FUNCTION [dbo].[Split](@separator VARCHAR(64)=',',@string NVARCHAR(MAX))
      RETURNS @ResultTab TABLE (
         Id    INT ,
         Res     NVARCHAR(500)
     )
     AS
     BEGIN
         DECLARE @Num INT
         IF(@string IS NOT NULL AND @string <> '' AND LEN(@string)>0)
         BEGIN
             IF(CHARINDEX(@separator,@string)>0)        --判断要截取的字符是否存在
             BEGIN
                 SET @Num=0
                 WHILE (CHARINDEX(@separator,@string)>0)        --如果要截取的字符存在,就继续循环
                 BEGIN
                     SET @Num=@Num+1
                     
                     INSERT INTO @ResultTab(Id,Res)        --截取字符串,插入表变量
                     SELECT @Num,LEFT(@string,CHARINDEX(@separator,@string)-1)
                     
                     --把已经截取并插入的字符串删除
                     SET @string=STUFF(@string,1,CHARINDEX(@separator,@string)-1+LEN(@separator),'')    
                 END
                 
                 --如果最后一个截取的字符串为空,那就不插入了
                 --例如:'123,456,789,' 这样的字符串最后剩下的就是空字符串了
                 IF(@string IS NOT NULL AND @string <> '')
                 BEGIN
                     INSERT INTO @ResultTab(Id,Res)
                     SELECT @Num+1,@string
                 END            
             END
             ELSE
             BEGIN
                     INSERT INTO @ResultTab(Id,Res)        --截取字符串,插入表变量
                     SELECT 1,@string
             END
          END
          ELSE
              BEGIN
                 DELETE FROM @ResultTab
              END
         RETURN
     END


  • 相关阅读:
    Linux--sed使用
    header函数的用法
    php的cli命令行接口
    extract函数在表单提交中提供的方便之处
    sersync实时同步备份的安装
    Centos7 服务器异常处理
    MySQL之——崩溃-修复损坏的innodb:innodb_force_recovery
    记一次oracle内存分配不足,前端访问500报错,如何扩容oracle的memory_target内存
    mysql sql语句整理
    关于控制mysql的binlog日志刷入磁盘频率的参数理解
  • 原文地址:https://www.cnblogs.com/hualiuliu/p/11457325.html
Copyright © 2011-2022 走看看