sql 语句系列(字符串之裂开)[八百章之第十三章]
创建分割列表
一张表:

先查询出来的效果是这样的:

mysql:
select emp_copy.deptno,GROUP_CONCAT(emp_copy.emps SEPARATOR ',') from emp_copy GROUP BY emp_copy.deptno
sql service:
with x(deptno,cnt,list,empno,len)
as(
select DEPTNO,COUNT(*) over (partition by deptno) cnt,CAST(ename as varchar(100)) ename,EMPNO,1 length
from emp
union all
select x.deptno,x.cnt,CAST(x.list +','+e.ENAME as varchar(100)) ename,e.EMPNO,x.len+1 length
from emp e,x
where e.DEPTNO=x.deptno and e.EMPNO>x.empno
)
select x.deptno,x.list
from x
where x.len=x.cnt
分割数据转换为多值int列表
'7654,7698,7782,7788' 切割为列表
mysql:
SELECT SUBSTRING_INDEX(substring_index('7654,7698,7782,7788',',',iter.id),',',-1) empno
from (SELECT id from T10) iter,(select '7654,7698,7782,7788' as vals) list
where iter.id<=(LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',','')))+1
sql service
select SUBSTRING(c,2,CHARINDEX(',',c,2)-2) as empno from
(
select SUBSTRING(csv.emps,iter.pos,LEN(csv.emps)) c
from (select ','+'7654,7698,7782,7788'+','as emps from t1) csv,(select id as pos from t100) iter
where iter.pos<LEN(csv.emps)) x
where LEN(c)>1 and SUBSTRING(c,1,1)=','
原理和mysql一致。
提取n 个分割字符串
例如:'7654,7698,7782,7788'
你想提取的是第二个分割字符串7698
mysql:
select substring_index(substring_index(emp_copy.`name`,',',2),',',-1) name,emp_copy.`name`
from emp_copy
WHERE LENGTH(emp_copy.`name`)-LENGTH(REPLACE(emp_copy.`name`,',',''))>=1
sql service:
在sql service 中我就不去创建表了。
我在上一个例子的改动,也就是上面的分割数据转换为多值int列表
select ROW_NUMBER() over(partition by name order by len(c) desc) rn,c
from
(
select SUBSTRING(csv.emps,iter.pos,LEN(csv.emps)) c,'7654,7698,7782,7788' name
from (select ','+'7654,7698,7782,7788'+','as emps from t1) csv,(select id as pos from t100) iter
where iter.pos<LEN(csv.emps)
) x
where LEN(c)>1 and SUBSTRING(c,1,1)=','

把得到的结果拍个序号。
第一个就是完整的,然后取第一个第一个。
第二个是去除第一个字符的,那么取第一个就是第二个了。
sql 语句系列(字符串之裂开)[八百章之第十三章]的更多相关文章
- sql 语句系列(多表之链)[八百章之第三章]
新增连接查询而不影响其他连接查询 请看图: 这种情况我们一般会使用左连接的方式. select e.ENAME,d.LOC,eb.RECEIVED from emp e join dept d on( ...
- sql 语句系列(null 值处理)[八百章之第二章]
查找只存在一个表中的数据 有两张表: EMP: select * from emp DEPT: 他们有共同的属性:deptno 现在要查询EMP 中的deptno不等于DEPTNO的deptno项. ...
- sql 语句系列(字符串的遍历嵌入删除与统计)[八百章之第十一章]
遍历字符串 我觉得首先要提出一个疑问: 一个数据库本身就是用于存储的,遍历字符串究竟有何意义? 先看如何实现的,毕竟sql service 是没有for循环,也没有loop和while的. selec ...
- mysql里面如何用sql语句让字符串转换为数字
sql语句将字符串转换为数字默认去掉单引号中的空格,遇到空格作为字符串截止, SELECT '123 and 1=1' +0 结果为123 MySQL里面如何用sql语句让字符串的‘123’转换为数字 ...
- sql 语句 截取字符串的两种方案
方案一:使用内置的函数 SUBSTRING,CHARINDEX,LEN三个内置函数 理论: SUBSTRING语法 SUBSTRING ( value_expression , start_exp ...
- 执行一个内容为SQL语句的字符串
两种方式:exec (sqlStr);或exec sp_executesql @sqlStr;绝大多数情况下,应使用第二种方式来执行动态sql.因为这种方式能重用执行计划,并且更安全. 参考例子:ht ...
- SQL Server中如何让SQL语句对字符串大小写敏感
在SQL Server中默认对大小写是不敏感的,例如fname='peter'和fname='PETER'结果是一样的.但有时候用户会要求区分大小写,如验证密码等.这种情况下的处理办法就是在字段后加上 ...
- sql语句截取字符串
Postgresql 当中有四种方式获取当前时间. 一:now() 通过now()获取的时间是最完整的时间,包括时区,秒也保留到了6位小数. select now(); ...
- 《Entity Framework 6 Recipes》中文翻译系列 (12) -----第三章 查询之使用SQL语句
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-2使用原生SQL语句更新 问题 你想在实体框架中使用原生的SQL语句,来更新底层 ...
- Mysql常用sql语句(八)- where 条件查询
测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...
随机推荐
- liunx 大文件切割,catalina.out 大文件打开
工作中,由于没有没有配日志文件切割,不小心日志文件上G了,用tail -f 或 cat 命令都难打开了,但偏这时候出了点事,需要查日志 怎么呢.第一条件命令 tail -50000f ca ...
- Mysql 增删改查语言系列
Mysql 数据语言系列 目录 Mysql 数据语言系列 一.数据定义语言 DDL 1 数据库规范 2 DDL 语言使用 2 创建视图 二. 数据操纵语言 DML 1 插入语法 2 更新语法 3 删除 ...
- 使用fastJson中的JSONObject对象简化POST请求传参-2022新项目
一.业务场景 Java项目开发中,经常会用到远程调用,不管是POST请求,Feign远程调用,还是使用Resttemplate中的POST方法等等都需要传递参数. 可是如何更好的传递参数呢?之前自己开 ...
- git 全局用户名改为英文,中文生成的git记录文件 不能有中文,现场反馈 git config user.name
设置用户名和邮箱 git config --global user.name "username" git config --global user.email useremail ...
- 回顾redis底层数据结构
参考,欢迎点击原文:https://blog.csdn.net/qq_38286618/article/details/102530020 https://www.cnblogs.com/jaycek ...
- 面试官:小伙子,能聊明白JMM给你SSP!我:嘚吧嘚吧一万字,直接征服面试官!
写在开头 面试官:小伙子,JMM了解吗? 我:JMM(Java Memory Model),Java内存模型呀,学过的! 面试官:那能给我详细的聊一聊吗,越详细越好! 我:嗯~,确定越详细越好?起码得 ...
- 《世嘉新人培训教材—游戏开发》2DGraphics1项目cmake构建
<世嘉新人培训教材-游戏开发>作为经典的游戏开发教程,提供了相关样例代码供我们进行开发使用.但是该样例是基于VS进行编写构建的,而本人日常喜欢CLion进行C/C++开发,于是准备使用cm ...
- JS(函数、作用域、预解析)
一 函数的概念 在 JS 里面,可能会定义非常多的相同代码或者功能相似的代码,这些代码可能需要大量重复使用.虽然 for循环语句也能实现一些简单的重复操作,但是比较具有局限性,此时我们就可以使用 JS ...
- HeaderedContentControl实现左右对称
在我们使用TextBlock却想给前面添加固定字段的时候,发现TextBlock没有Header属性, 这个时候我们可以用到HeaderedContentControl 然而,默认情况下Headere ...
- 记录--使用Canvas绘制一个验证码组件
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 使用Canvas绘制一个验证码组件 前言 验证码,这一日常伴随我们的要素,是我们在线交互的重要安全保障.你的手机短信里是否被它占据半壁江山 ...