zoukankan      html  css  js  c++  java
  • SQL根据字符串B分隔字符串A

    创建表值函数:

     1 CREATE FUNCTION [dbo].[F_Split]
     2  (
     3      @SplitString nvarchar(max),  --源字符串A
     4      @Separator nvarchar(10)=' '  --分隔字符串B,默认为空格
     5  )
     6  RETURNS @SplitStringsTable TABLE  --输出的数据表
     7  (
     8      [id] int identity(1,1),
     9      [value] nvarchar(max)
    10  )
    11  AS
    12  BEGIN
    13      DECLARE @CurrentIndex int;--开始截取字符串A的位置
    14      DECLARE @FindIndex int;--查询到字符串B的位置
    15      DECLARE @ReturnText nvarchar(max);--分割后的字符
    16 
    17      --保存被截取字符串B的长度
    18      DECLARE @SeparatorLen int; set @SeparatorLen=len(@Separator);
    19 
    20      SELECT @CurrentIndex=1;
    21      WHILE(@CurrentIndex<=len(@SplitString))--遍历字符串A
    22          BEGIN
    23              --charindex(目标字符串,被查找的字符串,开始查找的位置(为空时默认从第一位开始查找))
    24              SELECT @FindIndex=charindex(@Separator,@SplitString,@CurrentIndex);--获取B在A中的位置
    25             
    26              --如果B不存在A中,下一次查询到字符串的位置为:A的长度+B的长度
    27              IF(@FindIndex=0 OR @FindIndex IS NULL) Begin SELECT @FindIndex=len(@SplitString)+@SeparatorLen;End 
    28              --获取分隔后的字符
    29             
    30              --substring(被截取的字符串,开始截取字符串的位置,截取字符串的长度)
    31              SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@FindIndex-@CurrentIndex);
    32              INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);
    33             
    34              --初始化开始截取字符串A的位置
    35              SELECT @CurrentIndex=@FindIndex+@SeparatorLen;
    36           END
    37      RETURN;
    38  END

    查询到的结果如下:

      select * from F_Split('12ab34ab56ab','ab')

  • 相关阅读:
    JAVA字符串格式化-String.format()的使用
    分布式文件系统MFS(moosefs)实现存储共享(第二版)
    iOS 动画学习
    复制对象(一)copy和mutableCopy方法
    iOS-获取当前网页的 url 和 title 和 html
    排序算法 c实现
    常用正则表达式
    iOS-获取的NSDate date时间与实际相差8个小时解决方案
    网络爬虫基本原理(二)
    网络爬虫基本原理(一)
  • 原文地址:https://www.cnblogs.com/suflowers1700218/p/10281652.html
Copyright © 2011-2022 走看看