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 前言 ...
随机推荐
- 一文讲明白Java中线程与进程、并发与与并行、同步与异步
写在开头 ok,everybody,在过去的两周内,我们大体上讲完了Java的集合,在最后我们探讨了关于HashMap线程不安全的原因,又提出了ConcurrentHashMap这个线程安全的集合解决 ...
- 工具 --- IL指令集解释
引言 汇总一下所有的 .NET IL 指令,以及它们的名称.操作码值.堆栈转换行为和描述. 作为反编译IL代码时的查询字典. IL 指令集列表 以下内容来自微软官方文档,通过百度翻译API翻译为中文. ...
- GoLand打开后Project消失
一直用的好好的Goland,突然不能用了,左边栏Project"消失"了. 如下: 解决方法 遇到上面问题,一般情况是GoLand的cache问题,这个时候要将GoLand清理一下 ...
- kubernetes 1.20版本 二进制部署
kubernetes 1.20版本 二进制部署 目录 kubernetes 1.20版本 二进制部署 1. 前言 2. 环境准备 2.1 机器规划 2.2 软件版本 3. 搭建集群 3.1 机器基本配 ...
- MES集成警报灯系统,Http远程控制系统设计
核心功能设计 警报灯实机演示:https://www.bilibili.com/video/BV1294y1M7f3?p=2 接受服务器发送http·post请求远程控制警报灯,可接入MES等系统. ...
- .net core 多线程下使用 Random 会出现bug
.net core 多线程下使用 Random 会出现的bug 先看原文: Working with System.Random and threads safely in .NET Core and ...
- getClass()方法----getName()方法
public class Test { public static void main(String[] args) { Person p = new Person(1,"刘德华" ...
- 三维模型OBJ格式轻量化压缩处理效率提高的技术方法探讨
三维模型OBJ格式轻量化压缩处理效率提高的技术方法探讨 要提高三维模型OBJ格式轻量化压缩处理的效率,可以采取以下方法: 1.优化算法选择:选择合适的优化算法对模型进行轻量化处理.不同的优化算法有不同 ...
- 记录--封装一个通过js调用的全局vue组件
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在使用vue项目编写的时候,不可避免的会碰到需要时js api来调用组件进行显示的情况 例如饿了么element ui 的 Noti ...
- 创建远程仓库&克隆项目(Github)
创建远程仓库 在GitHub上注册一个账号,之后creat a new repository 创建的远程仓库把它看作一个百度网盘就可以了 克隆项目 1.远程仓库可以下载\克隆到本地 code :git ...