通过SQL按内容分拆成多字段

需求描述

将表里的一个字段,该字段的某行开始是key,随后对应的是其value,将key和value分别拆分对应的两个字段。如下图示例:

问题分析

该问题不适合用SQL来处理,因为SQL主要处理表格形式的结构化数据,用程序语言如Java、Python等更方便些。

解决方法

-- # SQL不擅长处理这种数据,用程序语言更方便些。
-- Step1 创建表并初始化数据
CREATE TABLE tb_data(
data varchar(20)
)
INSERT INTO tb_data
SELECT 'a.wav' data UNION
SELECT 1 data UNION
SELECT 2 data UNION
SELECT 'b.wav' data UNION
SELECT 3 data UNION
SELECT 4 data UNION
SELECT 'c.wav' data UNION
SELECT 5 data UNION
SELECT 6 data  UNION
SELECT 7 data -- SELECT * FROM tb_data
-- Step2 创建临时表tmp_data,主要存记录序号、分割开始位置、记录数。
-- DROP TABLE tmp_data;
create TEMPORARY table tmp_data(
id int,
data varchar(20),
pos smallint,
cnt int
)-- Step3 插入临时表。
INSERT INTO tmp_data
SELECT (@i:=@i+1)id,tb_data.*,INSTR(data,'.') dot,cnt
FROM tb_data,(select @i:=0)t ,(SELECT COUNT(1) cnt FROM tb_data) t2 SELECT * FROM tmp_data-- Step4 拆分字段
SELECT B.data,A.data seq
-- *
FROM tmp_data A
JOIN
(SELECT * ,CASE WHEN LEAD(id)OVER(order by id) IS NULL THEN 999999 ELSE LEAD(id)OVER(order by id) END as nextFROM tmp_dataWHERE pos>0
) B
ON A.id > B.id AND A.id < B.next-- Step 4 查看结果
/*
data    seq
a.wav   1
a.wav   2
b.wav   3
b.wav   4
c.wav   5
c.wav   6
c.wav   7
*/

如何通过SQL按内容拆分字段(将一个字段值拆分两个字段)相关推荐

  1. Python语言学习:利用pandas对两列字段元素求差集(对比两列字段所有元素的异同)

    Python语言学习:利用pandas对两列字段元素求差集(对比两列字段所有元素的异同) 目录 利用pandas对两列字段元素求差集(对比两列字段所有元素的异同) 输出结果 实现代码 利用pandas ...

  2. asp怎么循环增加字段和字段对应的值_MySQL数据类型和字段属性原理与用法详解

    本文实例讲述了mysql数据类型和字段属性.分享给大家供大家参考,具体如下: 本文内容: 数据类型 数值类型 整数型 浮点型 定点型 日期时间类型 字符串类型 补充: 显示宽度与zerofll 记录长 ...

  3. mysql 计算 两个字段 之差_MYSQL计算两个字段日期差

    一,TIMESTAMPDIFF 语法: TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2). 说明: 返回日期或日期时间表达式datetime_ ...

  4. 【ArcGIS遇上Python】ArcGIS Python获取某个字段的唯一值(获取指定字段的不同属性值)

    以土地利用数据为例,DLMC字段为每个图斑的用地类型,怎样用Python代码获取该字段的属性唯一值? Python代码实现结果: Python源代码: import arcpy from arcpy ...

  5. oracle求两个字段的日期差

    1.单纯求两个字段的日期差: select to_date('08/06/2015','mm/dd/yyyy')-to_date('07/01/2015','mm/dd/yyyy') from dua ...

  6. 用户操作日志记录字段修改前后值

    你可能遇到这样的需求,要详细记录用户的操作日志,像下面这样: 用户张三将年龄从"20"改为"21" 用户张三将爱好从"篮球"改为" ...

  7. sql server中将一个字段根据某个字符拆分成多个字段显示

    sql server 数据库中某张表(Person)的数据信息是: ID Address 1 平山花园-4单元-12幢-203 2 香山花园-3单元-22幢-304 现在有需求是,将地址信息显示形式改 ...

  8. mysql 把一个字段的值_mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法...

    需求:把一个表某个字段内容复制到另一张表的某个字段. 实现sql语句1: UPDATE file_manager_folder f1 LEFT OUTER JOIN file_manager_fold ...

  9. 平均成绩是计算数学计算机英语三门,创建一个查询,计算并显示“学号”和“平均成绩”两个字段内容,其中平均成绩 是计算数学、计算机和英语_开卷宝...

    "学生表"中有"学号"."姓名"."性别"和"入学成绩"等字段.执行如下SQL命令后的结果是( ). ...

最新文章

  1. Ubuntu 系统如何修改主机名
  2. tcp传输中的序列号
  3. Scrapy实战篇(一)之爬取链家网成交房源数据(上)
  4. 越南估值最高的电商公司之一:Tiki获1亿美元融资!
  5. 全选文字的快捷键_高效办公必备Excel快捷键之Ctrl+26个字母!掌握它们,告别加班...
  6. java hashmap遍历顺序_Java中HashMap遍历的两种方式
  7. 1.x和2.x的区别
  8. 非阻塞同步算法实战(二)-BoundlessCyclicBarrier
  9. 部门WIFI配置-防火墙-核心交换机和POE交换机
  10. java下载ftp_Java FTP下载文件
  11. Julia的Dates库是重要和必要的补充!
  12. linux修复硬盘文件命令,fsck命令_Linux fsck 命令用法详解:检查并且试图修复文件系统中的错误...
  13. win7 、2008 提示Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法...
  14. Java 结构化数据处理开源库 SPL
  15. “洋葱狗”潜伏3年终曝光,定期偷袭能源及交通行业
  16. 物联网网线POE供电主控设计方案
  17. ASEMI线性稳压电源芯片AMS1117-3.3参数及接线电路图
  18. AWS KVS(Kinesis Video Streams)之WebRTC移植编译(四)
  19. 使用 DISM 或系统更新准备工具修复 Windows 更新错误
  20. 防火墙(ASA)的基本配置与远程管理

热门文章

  1. ActiveMQ集成Spring
  2. VTK:vtk3DSImporter用法实战
  3. OpenCASCADE:形状愈合之根据指定标准分割形状的工具
  4. wxWidgets:wxScopedArray< T >类模板的用法
  5. boost::reverse_copy相关的测试程序
  6. boost::mp11::mp_iota相关用法的测试程序
  7. boost::math::non_central_chi_squared用法的测试程序
  8. boost::hana模块使用 Hana 实现基本维度分析的示例
  9. GDCM:gdcm::FilenameGenerator的测试程序
  10. GDCM:gdcm::ByteSwap的测试程序