zoukankan      html  css  js  c++  java
  • SQL语句,表中的列字段字符串合并 和 字符串拆分成表

    研究了两天也没有研究的很明白,但是问题做出来了,

    如下表中的字段,第一级是由逗号隔开字符串,第二级是由空格隔开的字符串,现在想取空格字符串中的第几个空格前后的字符串,

    所用到的工具,1、是 for xml path(''),

                 2、是Stuff,必须和select 配合着使用哦这样,才能把字符串前面的字符去掉。和right的区别是设么?是stuff可以,在删除的位置可以插入新的字符串。

            3、是一个函数f_split

    ALTER function [dbo].[f_split](@c varchar(2000),@split varchar(2))
    returns @t table(id int, col varchar(50))
    as
    begin
    declare @id int=0
    while(charindex(@split,@c)<>0)
    begin
    set @id=@id+1
    insert @t(id,col) values (@id,substring(@c,1,charindex(@split,@c)-1))
    set @c = stuff(@c,1,charindex(@split,@c),'')
    end
    set @id=@id+1
    insert @t(id,col) values (@id,@c)
    return
    end

     根据上面三个内容我摸索着写了半天,作用就是取t_Project_PartItem2这个表中,HJCS1一级用逗号隔开,二级用空格隔开,取出空格隔开里面的指定字符串哦,取第几个空格由ID来指定哦

    select stuff ( (select ','+o.temp from (
    /*2*/
    select stuff((

    select ' '+e.col from f_split(l.col,' ') as e where id<6 AND ID>3 FOR XML PATH('') ), 1, 1, '') as temp

    from (select n.Col from f_split(m.HJCS1,',')/*这句作用就是按照逗号分隔开来生成表*/ as n) as l

    /*2*/
    )as o FOR XML PATH('')),1,1,'' ) as HJCS11 from [t_Project_PartItem2] m where nID>22 and nID<25

    取第四个和第五个字符串的值结果如下。是不是很成功啊。我一个三旬老汉,还要写这个真累啊。

  • 相关阅读:
    高级定制_百度百科
    大叔也学Xamarin系列
    WebApi系列~dynamic让你的省了很多临时类
    大叔也说Xamarin~Android篇~支付宝SDK的集成
    知方可补不足~sqlserver中使用ROW_NUMBER进行的快速分页
    EF架构~有时使用SQL更方便
    【deep learning学习笔记】注释yusugomori的LR代码 --- LogisticRegression.h
    线程同步
    泛型接口的实现方式之二
    jsp获得本地及serverIP的方法
  • 原文地址:https://www.cnblogs.com/ModBus/p/9111311.html
Copyright © 2011-2022 走看看