declare @strVar varchar(2000)
declare @ResultVar varchar(2000)
set @ResultVar='[薄饼],[点心],[海鲜],[酒吧],[楼面],[茗茶],[乳鸽],[烧味],[生蚝],[套餐宴席],[煨汤],[中厨]'
select * from Sys_Fn_Get_TableFromStringSplit(@strVar,',')

--Result

Id  FlowId

[薄饼]    1
[点心]    2
[海鲜]    3
[酒吧]    4
[楼面]    5
[茗茶]    6
[乳鸽]    7
[烧味]    8
[生蚝]    9
[套餐宴席]    10
[煨汤]    11
[中厨]    12

--DIY
set @ResultVar=STUFF((select ','+ 'sum(' + p.Id+') as ' +p.id   
                    from Sys_Fn_Get_TableFromStringSplit(@strVar,',') p for XML path('')),1,1,'')

select @ResultVar

--Result

sum([薄饼]) as [薄饼],sum([点心]) as [点心],sum([海鲜]) as [海鲜],sum([酒吧]) as [酒吧],sum([楼面]) as [楼面]

--字符串分割成表函数

create function [dbo].[Sys_Fn_Get_TableFromStringSplit]
(
    @Strings varchar(max),       --要分割成表的字符串 盘点时候要分割的数据可能超过8000
    @Spliter varchar(10)        --分隔符
)
returns @Table table(Id varchar(50),FlowId int identity(1,1))
as
begin
    declare @index int, @tempValue varchar(50)
    
    while (1 = 1)
    begin
        set @index = charindex(@Spliter, @Strings);
        if (@index > 0)
        begin
            set @tempValue = substring(@Strings, 1, @index);
            set @Strings = substring(@Strings, @index + 1, len(@Strings) -@index);
            set @tempValue = replace(ltrim(rtrim(@tempValue)), @Spliter, '');
            if (len(@tempValue) > 0)
            begin
                insert into @Table
                values
                  (
                    @tempValue
                  );
            end
        end
        else
        begin
            set @tempValue = ltrim(rtrim(@Strings));
            if (len(@tempValue) > 0)
            begin
                insert into @Table
                values
                  (
                    @tempValue
                  );
            end            
            break;
        end
    end
    return;
    /*********************************Demo*****************************************
    
    select * from   dbo.Sys_Fn_Get_TableFromStringSplit('1,2,3,,4,5,6', ',');
    select * from   dbo.Sys_Fn_Get_TableFromStringSplit('1 2 3,,4 5,6', ' ');
    select * from   dbo.Sys_Fn_Get_TableFromStringSplit('1,2;3,,4,5;6', ';');
    
    *******************************************************************************/
end

SQL字符串分割转列,Sql列转字符串的更多相关文章

  1. 学习之路三十六:SQL知识总结 - [游标||字符串分割]

    好久没有写文章了,今天把前不久项目用到的SQL知识总结一下. 一丶字符串分割 SQL内置函数中是没有Split分割函数的,所以需要自己去实现,不多说,上代码: )) RETURNS @result T ...

  2. Python字符串操作之字符串分割与组合

    12.字符串的分割和组合 12.1 str.split():字符串分割函数 通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. 语法: str.split(s, num)[n] 参数说明: s ...

  3. 将中文字符串分割为数组 解决str_split中文乱码php

    首先来介绍str_split()这个函数: 它的作用是将字符串分割为数组: 例如: $str='abcde';str_plite($str); 打印结果如下:Array(    [0] => a ...

  4. C++ 字符串分割,并把子字符串转换成int型整数

    主要涉及到string类的两个函数find和substr: find()函数的用法: 原型:size_t find ( const string& str, size_t pos = 0 ) ...

  5. 【原】sql 将某列拼成一个字符串

    SQL Server中,写存储过程,时常会碰到这样一个需求:从某个表中取某一列,然后需要将这一列数据以某种形式拼成一个字符串,以供后面使用,下面这种方法能够实现此需求. --取说明书模块枚举,结果格式 ...

  6. Sql Server将一列字段拼接成字符串方法

    最近在项目中遇到个问题,需要将表中某列字段合并成字符串输出,如果直接通过代码全部读取出来,再遍历进行拼接显然不是最好的方法,所以想着能否在数据读取的时候直接拼接好返回,网上搜了可通过for xml来实 ...

  7. 在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串)

    原文:在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  8. 在论坛中出现的比较难的sql问题:1(字符串分拆+行转列问题 SQL遍历截取字符串)

    原文:在论坛中出现的比较难的sql问题:1(字符串分拆+行转列问题 SQL遍历截取字符串) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方 ...

  9. [SQL Server]一列多行转换为字符串

    在 SQL Server 中,如何将多行数据变成一个字符串保存. skill 投石 挖矿 刮痧 上面三行数据想要得到结果为:投石,挖矿,刮痧 有两种方式: 拼接字符串. 使用 for XML 首先创建 ...

随机推荐

  1. django rest_framework 框架的使用

    django 的中间件 csrf Require a present and correct csrfmiddlewaretoken for POST requests that have a CSR ...

  2. Elasticsearch client node 启动时出现警告:exception caught on transport layer 及java.net.NoRouteToHostException: No route to host

    发现该问题源自发现kibana不能打开sense,并且看见elasticsearch插件处于服务不可用状态,但是在client node上curl localhost:9200发现能够返回ES基本信息 ...

  3. [POJ] Financial Management

    Financial Management Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 182193   Accepted: ...

  4. mysql数据导入的时候提示Got a packet bigger than 'max_allowed_packet' bytes

    Got a packet bigger than 'max_allowed_packet' bytes错误 默认可能是2M 把max_allowed_packet设置大于5M试试,我设置为160M,输 ...

  5. Mock.js开发中拦截Ajax

    Mock.js 是一款前端开发中拦截Ajax请求再生成随机数据响应的工具.可以用来模拟服务器响应. 优点是非常简单方便, 无侵入性, 基本覆盖常用的接口数据类型. 在我们的生产实际中,后端的接口往往是 ...

  6. Oracle数据库备份与恢复的三种方法

    转自blueskys567原文Oracle数据库备份与恢复的三种方法, 2006-10. 有删改 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份. 导出 ...

  7. mac使用备注

    快捷键: 掌握好多手势和快捷键可以有效的提高工作效率,触控板和快捷键基本让你可以脱离鼠标. Command+Tab                   任意情况下切换应用程序 - 向前循环 Shift ...

  8. .NET高级软件工程师面试题排行榜(转载)

    原文引用:https://m.sanwen8.cn/p/104gMSd.html 一.对于 Web 性能优化,您有哪些了解和经验吗? 出现指数:五颗星 主要考点:这道题是博主在博客园的新闻里面看到的, ...

  9. Apache Hive 安装文档

    简介: Apache hive 是基于 Hadoop 的一个开源的数据仓库工具,可以将结构化的数据文件映射为一张数据库表, 并提供简单的sql查询功能,将 SQL 语句转换为 MapReduce 任务 ...

  10. java.util.ConcurrentModificationException异常分析

    Java在操作ArrayList.HashMap.TreeMap等容器类时,遇到了java.util.ConcurrentModificationException异常.以ArrayList为例,如下 ...