利用递归分割(Split)字符串
利用递归分割(Split)字符串
工作需要将表里的某个字段分割之后再插入到另一个表中,其实数据量不大,直接用游标一行一行的取,再利用循环来分割之后再实现数据的插入应该可以直接满足需求。但是,想到递归应该也可以实现需求,而且递归也不太熟,所以就以试试的心态来做一下,想不到既然实现了需要的效果。
初始化:
--需要分割的结果集
SELECT
*
INTO #tmp_t1
FROM (VALUES('Morning,Midday,Evening,',1),('Breakfast,Midday,Evening,',2)) AS x(dayPart,types); --需要split的字符串手动添加了个逗号,
SELECT * FROM #tmp_t1
需要分割的字段
下面使用公用表达式来实现递归:
;WITH CTE_recursive AS(
--定位点成员
SELECT
CHARINDEX(',',dayPart) AS idx, --得到第一个逗号的下标
REPLACE(SUBSTRING(daypart,1,CHARINDEX(',',dayPart)),',','') AS dp, --得到第一个逗号前的字符
SUBSTRING(dayPart,len(REPLACE(SUBSTRING(dayPart,1,CHARINDEX(',',dayPart)),',',''))+2,len(dayPart)) AS dayPart, --截取第一个逗号后面的字符串
types
FROM #tmp_t1
UNION ALL
--递归成员
SELECT
CHARINDEX(',',cte.dayPart) AS idx,
REPLACE(SUBSTRING(cte.daypart,1,CHARINDEX(',',cte.dayPart)),',','') AS dp,
SUBSTRING(cte.daypart,len(REPLACE(SUBSTRING(cte.dayPart,1,CHARINDEX(',',cte.dayPart)),',',''))+2,len(cte.dayPart)) AS dayPart,
cte.types
FROM CTE_recursive cte
INNER JOIN #tmp_t1 t1 ON cte.types = t1.types
WHERE CHARINDEX(',',cte.dayPart) > 0 --中止递归的条件
)
SELECT * FROM CTE_recursive --ORDER BY types;
递归结果
排过序的结果
利用递归分割(Split)字符串的更多相关文章
- shell利用数组分割组合字符串
#!/bin/bash #接收脚本参数如[sh a.txt .0_3_4_f_u_c_k_8080] a=$ #把参数分割成数组 arr=(${a//_/ }) #显示数组长度 #echo ${#ar ...
- Split字符串分割函数
非常非常常用的一个函数Split字符串分割函数. Dim myTest myTest = "aaa/bbb/ccc/ddd/eee/fff/ggg" Dim arrTest arr ...
- Javascript:字符串分割split()妙用
概述: split() 方法将字符串分割为字符串数组,并返回此数组 语法格式: stringObject.split(separator,limit) 参数说明: 注意:如果把空字符串 (" ...
- freemarker中的split字符串分割
freemarker中的split字符串分割 1.简易说明 split分割:用来根据另外一个字符串的出现将原字符串分割成字符串序列 2.举例说明 <#--freemarker中的split字符串 ...
- freemarker中的split字符串分割(十六)
1.简易说明 split分割:用来根据另外一个字符串的出现将原字符串分割成字符串序列 2.举例说明 <#--freemarker中的split字符串分割--> <#list &quo ...
- C语言实现split以某个字符分割一个字符串
方式一: 使用strtok # include <string.h> # include <stdio.h> void split(char *src,const char * ...
- 字符串分割split()
知识讲解: split() 方法将字符串分割为字符串数组,并返回此数组. 语法: stringObject.split(separator,limit) 参数说明: 注意:如果把空字符串 (" ...
- split 将字符串分割成字符串数组
list_name = list_name.split(","); split() 方法用于把一个字符串分割成字符串数组. 语法 stringObject.split(separa ...
- java:字符串的split方法,使用多个分隔符,分割一个字符串
java语言中,多个分隔符,分割一个字符串: String[] tmpAuthors=tempAuthorStr.split(";|,|:|,"); 可以在线测试:java代码 在 ...
随机推荐
- xadmin站点管理类
9. Xadmin xadmin是Django的第三方扩展,比使用Django的admin站点更强大也更方便. 文档:https://xadmin.readthedocs.io/en/latest/i ...
- 谷歌浏览器中a:link设置字体颜色无效问题
<div id="box"> <a href="#">111111</a> <a href=""& ...
- linux虚拟主机的三种方法
虚拟主机虚拟主机是将一台(或者一组)服务器的资源(系统资源.网络带宽.存储空间等)按照一定的比例分割成若干相对独立的“小主机”的技术.每一台这样的“小主机”在功能上都可以实现WWW.FTP.Mail等 ...
- 三、Scrapy中选择器用法
官方示例源码<html> <head> <base href='http://example.com/' /> <title>Example web ...
- golang实现高阶函数之map
package main import "fmt" func iMap(num []int, f func(a int) int) []int{ var r []int for _ ...
- 二叉堆 及 大根堆的python实现
Python 二叉堆(binary heap) 二叉堆是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树.二叉堆满足堆特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子 ...
- Linux之网络ping(unknown host)故障及yum no more mirrors to try
1.ping外网出现ping:unknown host 字样故障 鉴于网上大多都是提供临时生效的解决办法,这里不再赘述,并提供下永久生效的方案: 永久生效: 1)添加DNS地址和下一跳网关地址至网 ...
- Android MMS数据库存储说明
数据表 MMS模块总共包含17张表:addr.android_metadata.attachments.canonical_addresses.drm.part.pdu.pending_msgs.ra ...
- hdu2007 平方和与立方和【C++】
平方和与立方和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- mac上的svn命令
Mac 终端添加代码到SVN从SVN拉取代码步骤:1.cd /Users/指定路径(本地路径)2.svn checkout https://xxx.xxx.xx/svn/project(服务器路径) ...