SQL求助----将某个字段按每两个字符进行拆分,显示多条记录

会跑过兔子的乌龟 2017-09-25 11:55:19
现有一个表zybq,第一列DM,第二列MC,第三列QX,现在希望将第三列字段值按每两个字符拆分,变成多条记录。
原始表
希望的效果
...全文
1034 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2017-09-26
  • 打赏
  • 举报
回复
楼主,我试试下手机移动端回帖,听说可用分加倍~
碧水幽幽泉 2017-09-25
  • 打赏
  • 举报
回复
引用 9 楼 qq_31654575 的回复:
可以实现,真的是太感谢,谢谢大神

共同学习,一起进步~
  • 打赏
  • 举报
回复
可以实现,真的是太感谢,谢谢大神
碧水幽幽泉 2017-09-25
  • 打赏
  • 举报
回复
如果最终结果不需要排序的话,就不用查询lv字段,。
这个字段我是用来辅助排序的。
碧水幽幽泉 2017-09-25
  • 打赏
  • 举报
回复

with tmp as
(
select 1 dm, '一病区(老院)' mc, 'Z1' qx from dual union all
select 2 dm, '二病区(老院)' mc, 'Z1' qx from dual union all
select 3 dm, '三病区' mc, 'h3hzZ1c3y1' qx from dual union all
select 4 dm, '四病区' mc, 'h4hzZ1c3y1' qx from dual
)
select distinct dm,mc,qx,lv from(
select dm,mc,substr(qx,(level-1)*2+1,2 ) qx,level lv
from tmp
connect by level <= (select max(round( length(qx)/2)) from tmp)
)where qx is not null
order by dm,lv

用我这个SQL语句试试看。
chengccy 2017-09-25
  • 打赏
  • 举报
回复
12c with tmp as ( select 1 dm, '一病区(老院)' mc, 'Z1' qx from dual union all select 2 dm, '二病区(老院)' mc, 'Z1' qx from dual union all select 3 dm, '三病区' mc, 'h3hzZ1c3y1' qx from dual union all select 4 dm, '四病区' mc, 'h4hzZ1c3y1' qx from dual ) select dm,mc,regexp_substr(qx,'.{2}',1,l) as qx from tmp t outer apply(select level as l from dual connect by level<=length(t.qx)/2)
  • 打赏
  • 举报
回复
好的,非常感谢
  • 打赏
  • 举报
回复
Oracle
  • 打赏
  • 举报
回复
辛苦大神,但是我在函数新建之后,直接将“测试数据后”的那些语句应用到zybq表上,一直报“SQL命令未正确结束”的错误,是为什么?非常感谢解答
二月十六 2017-09-25
  • 打赏
  • 举报
回复
引用 4 楼 qq_31654575 的回复:
Oracle
给移动Oracle版了,mssql和Oracle有的还是不太一样。
二月十六 2017-09-25
  • 打赏
  • 举报
回复
新建函数:
CREATE FUNCTION dbo.get2str
    (
      @SourceSql NVARCHAR(MAX) 
    )
RETURNS @temp TABLE ( F1 VARCHAR(100) )
AS
    BEGIN   
        DECLARE @ch AS VARCHAR(100)    
        WHILE ( @SourceSql <> '' )
            BEGIN   
                SET @ch = LEFT(@SourceSql,2)   
                INSERT  @temp
                VALUES  ( @ch )   
                SET @SourceSql = STUFF(@SourceSql, 1,2,
                                       '')   
            END   
        RETURN   
    END
GO

查询语句:
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([DM] int,[MC] nvarchar(23),[QX] nvarchar(30))
Insert #T
select 1,N'一病区',N'Z1' union all
select 2,N'三病区',N'h3hzz1c3y1'
Go
--测试数据结束
SELECT  DM ,
        MC ,
        f1 AS QX
FROM    #T
        CROSS APPLY ( SELECT    *
                      FROM      dbo.get2str(QX)
                    ) t
引用 2 楼 qq_31654575 的回复:
辛苦大神,但是我在函数新建之后,直接将“测试数据后”的那些语句应用到zybq表上,一直报“SQL命令未正确结束”的错误,是为什么?非常感谢解答
是mssql吗?
二月十六 2017-09-25
  • 打赏
  • 举报
回复
新建函数:
CREATE FUNCTION dbo.get2str
(
@SourceSql NVARCHAR(MAX)
)
RETURNS @temp TABLE ( F1 VARCHAR(100) )
AS
BEGIN
DECLARE @ch AS VARCHAR(100)
WHILE ( @SourceSql <> '' )
BEGIN
SET @ch = LEFT(@SourceSql,2)
INSERT @temp
VALUES ( @ch )
SET @SourceSql = STUFF(@SourceSql, 1,2,
'')
END
RETURN
END
GO


查询语句:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([DM] int,[MC] nvarchar(23),[QX] nvarchar(30))
Insert #T
select 1,N'一病区',N'Z1' union all
select 2,N'三病区',N'h3hzz1c3y1'
Go
--测试数据结束
SELECT DM ,
MC ,
f1 AS QX
FROM #T
CROSS APPLY ( SELECT *
FROM dbo.get2str(QX)
) t


通过慢sql分析的学习,了解什么是慢sql,以及慢SQL会引起那些性能问题。清楚慢sql日志的设置,然后再通过慢sql分析工具的学习,清楚慢sql分析的步骤和流程。慢sql分析工具:mysqldumpslow工具、explain工具、profile工具、Optimizer Trace工具。 提供课程中所使用的sql语句。 课程内容:第一章:课程简介1、课程介绍2、课程大纲 第二章:慢sql简介1、慢sql简介2、慢sql会引起的问题 第三章:慢日志的设置1、慢sql的分析流程2、慢日志参数理解3、慢日志参数设置:第1种方式:my.ini文件设置4、慢日志参数设置:第2种方式:sql脚本设置5、慢日志参数设置-效果验证 第四章:如何发现慢sql1、如何发现慢sql:第1种方式:慢日志文件2、如何发现慢sql:第2种方式:mysql库的slow_log表 第五章:慢sql分析工具1、慢sql提取-mysqldumpslow工具-使用方法2、慢sql提取-mysqldumpslow工具-操作实战3、慢sql的执行计划分析-explain分析-执行计划结果说明4、慢sql的执行计划分析-explain分析-索引介绍+type类型举例5、慢sql的资源开销分析-profile分析-分析步骤6、慢sql的资源开销分析-profile分析-show profile执行阶段说明7、慢sql的资源开销分析-profile分析-完整列表说明+操作实战8、慢sql的跟踪分析-Optimizer Trace分析-分析步骤9、慢sql的跟踪分析-Optimizer Trace表的介绍10、索引失效场景举例 第六章:慢日志清理1、慢日志清理

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧