zoukankan      html  css  js  c++  java
  • 将字符串转换成表

    有时会遇到,字符串中存在分隔符,需要将其转换成表,和其他table进行join查询;有时会遇到相反的情况,需要将表中的数据行拼接成一个字符串显示。

    一,将字符串转换成表

    使用XML来进行转换,性能快,代码简洁,

    1,示例,字符串的分隔符是逗号,将其转换成xml。

    复制代码
        declare @separator varchar(10)
        declare @str varchar(max)
        
        set @separator=','
        set @str='54,57,55,56,59'
    
        declare @xml xml
        set @xml=convert(xml,'<v>' + REPLACE(@str, @separator, '</v><v>') + '</v>')
    
        SELECT ids=N.v.value('.', 'int') FROM @xml.nodes('/v') N(v)
    复制代码

    2,示例,字符串的分隔符是逗号,将其转换成xml。

    复制代码
        declare @separator varchar(10)
        declare @str varchar(max)
        
        set @separator=','
        set @str='54,57,55,56,59'
    
        declare @xml xml
        set @xml=convert(xml,'<Item v=''' + REPLACE(@str, @separator, '''></Item><Item v=''') + '''></Item>')
        
        SELECT ids=N.v.value('@v', 'int') 
        FROM @xml.nodes('/Item') N(v)
    复制代码

    3,创建表值函数

    复制代码
    CREATE FUNCTION dbo.fn_split
    (
        @str varchar(max),
        @separator varchar(max)
    )
    RETURNS @dt TABLE 
    (
        value int
    )
    AS
    BEGIN
        declare @xml xml
        set @xml=convert(xml,'<Item v=''' + REPLACE(@str, @separator, '''></Item><Item v=''') + '''></Item>')
        
        insert into @dt
        SELECT N.v.value('@v', 'int') 
        FROM @xml.nodes('/Item') N(v)
        
        RETURN 
    END
    复制代码

    4,内置表值函数

    SQL Server 2016 新增一个表值函数string_split,用于按照分隔符将字符串分割成表值数据,返回的字段名是Value

    STRING_SPLIT ( string , separator )  

    二,将表数据拼接成字符串

    复制代码
    create table dbo.test
    (
    id int,
    txt nvarchar(10)
    )
    
    select id,(select a.txt+'' from dbo.test a where a.id=t.id for xml path('')) as descr
    from dbo.test t 
    group by id
  • 相关阅读:
    转: sql语句获取本周、本月数据
    Java 程序中的静态代码块
    Java 控制台程序输出计时器代码
    网页出现“繁体字”?
    html5中video视频只有声音没有图像
    Clipboard 剪辑板
    区分window8中 ie10 window phone8
    void 0
    touch pointer
    全局作用域 eval
  • 原文地址:https://www.cnblogs.com/zhengxingpeng/p/6688146.html
Copyright © 2011-2022 走看看