• 将字符串转换成表


    有时会遇到,字符串中存在分隔符,需要将其转换成表,和其他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
  • 相关阅读:
    Day 20 初识面向对象
    Day 16 常用模块
    Day 15 正则表达式 re模块
    D14 模块 导入模块 开发目录规范
    Day 13 迭代器,生成器,内置函数
    Day 12 递归,二分算法,推导式,匿名函数
    Day 11 闭包函数.装饰器
    D10 函数(二) 嵌套,命名空间作用域
    D09 函数(一) 返回值,参数
    Day 07 Day08 字符编码与文件处理
  • 原文地址:https://www.cnblogs.com/zhengxingpeng/p/6688146.html
Copyright © 2020-2023  润新知