选读SQL经典实例笔记21_字符串处理

 

1. SQL 并不专门用于处理复杂的字符串

1.1. 需要有逐字遍历字符串的能力。但是,使用SQL 进行这样的操作并不容易

1.2. SQL 没有Loop循环功能

1.2.1. Oracle的MODEL子句除外

2. 遍历字符串

2.1. 把EMP表的ENAME等于KING的字符串拆开来显示为4行,每行一个字符

2.2. sql

select substr(e.ename,iter.pos,1) as Cfrom (select ename from emp where ename = 'KING') e,(select id as pos from t10) iter
where iter.pos <= length(e.ename)
C
-
K
I
N
G

2.3. T10表,该表有10行记录(它只有一列,列名为ID,它的值分别是从1到10

3. 嵌入引号

3.1. sql

QMARKS
--------------
g'day mate
beavers' teeth
'

3.2. sql

select 'g''day mate' qmarks from t1 union all
select 'beavers'' teeth'    from t1 union all
select ''''                 from t1

4. 统计字符出现的次数

4.1. 10,CLARK,MANAGER

4.1.1. 该字符串里有多少个逗号

4.2. sql

 select (length('10,CLARK,MANAGER')-length(replace('10,CLARK,MANAGER',',','')))/length(',')as cntfrom t1

4.3. 获取不含逗号的字符串长度

4.4. 逗号的删除则借助了REPLACE函数

5. 删除不想要的字符

5.1. sql

ENAME             SAL
---------- ----------
SMITH             800
ALLEN            1600
WARD             1250
JONES            2975
MARTIN           1250
BLAKE            2850
CLARK            2450
SCOTT            3000
KING             5000
TURNER           1500
ADAMS            1100
JAMES             950
FORD             3000
MILLER           1300

5.2. sql

ENAME      STRIPPED1         SAL STRIPPED2
--------- ---------- ---------- ---------
SMITH      SMTH              800 8
ALLEN      LLN              1600 16
WARD       WRD              1250 125
JONES      JNS              2975 2975
MARTIN     MRTN             1250 125
BLAKE      BLK              2850 285
CLARK      CLRK             2450 245
SCOTT      SCTT             3000 3
KING       KNG              5000 5
TURNER     TRNR             1500 15
ADAMS      DMS              1100 11
JAMES      JMS               950 95
FORD       FRD              3000 3
MILLER     MLLR             1300 13

5.3. DB2

5.3.1. sql

select ename,replace(translate(ename,'aaaaa','AEIOU'),'a','') stripped1,sal,replace(cast(sal as char(4)),'0','') stripped2from emp

5.4. Oracle

5.5. PostgreSQL

5.6. 使用内置函数TRANSLATE和REPLACE删除不想要的字符和字符串

5.6.1.  sql

select ename,replace(translate(ename,'AEIOU','aaaaa'),'a')as stripped1,sal,replace(sal,0,'') as stripped2from emp

5.7. MySQL

5.8. SQL Server

5.9. 多次调用REPLACE 函数

5.9.1.  sql

select ename,replace(replace(replace(replace(replace(ename,'A',''),'E',''),'I',''),'O',''),'U','')as stripped1,sal,replace(sal,0,'') stripped2from emp

6. 分离数字和字符数据

6.1. sql

DATA
---------------
SMITH800
ALLEN1600
WARD1250
JONES2975
MARTIN1250
BLAKE2850
CLARK2450
SCOTT3000
KING5000
TURNER1500
ADAMS1100
JAMES950
FORD3000
MILLER1300

6.2. DB2

6.2.1. sql

select replace(translate(data,'0000000000','0123456789'),'0','') ename,cast(replace(translate(lower(data),repeat('z',26),'abcdefghijklmnopqrstuvwxyz'),'z','') as integer) salfrom (select ename||cast(sal as char(4)) datafrom emp) x

6.3. Oracle

6.3.1.  sql

select replace(translate(data,'0123456789','0000000000'),'0') ename,to_number(replace(translate(lower(data),'abcdefghijklmnopqrstuvwxyz',rpad('z',26,'z')),'z')) salfrom (select ename||sal datafrom emp)

6.4. PostgreSQL

6.4.1.  sql

select replace(translate(data,'0123456789','0000000000'),'0','') as ename,cast(replace(translate(lower(data),'abcdefghijklmnopqrstuvwxyz',rpad('z',26,'z')),'z','') as integer) as salfrom (select ename||sal as datafrom emp) x

7. 按照子字符串排序

7.1. sql

ENAME
----------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

7.2. DB2

7.3. Oracle

7.4. PostgreSQL

7.5. MySQL

7.6. 使用内置函数LENGTH和SUBSTR

7.6.1.  sql

select enamefrom emporder by substr(ename,length(ename)-1,2)

7.7. SQL Server

7.7.1. sql

select enamefrom emporder by substring(ename,len(ename)-1,2)

8. 根据字符串里的数字排序

8.1. sql

DATA
-----------------------------
CLARK   7782 ACCOUNTING
KING    7839 ACCOUNTING
MILLER  7934 ACCOUNTING
SMITH   7369 RESEARCH
JONES   7566 RESEARCH
SCOTT   7788 RESEARCH
ADAMS   7876 RESEARCH
FORD    7902 RESEARCH
ALLEN   7499 SALES
WARD    7521 SALES
MARTIN  7654 SALES
BLAKE   7698 SALES
TURNER  7844 SALES
JAMES   7900 SALES

8.2. DB2

8.2.1.  sql

select datafrom Vorder bycast(replace(translate(data,repeat('#',length(data)),replace(translate(data,'##########','0123456789'),'#','')),'#','') as integer)

8.3. Oracle

8.3.1.  sql

select datafrom Vorder byto_number(replace(translate(data,replace(translate(data,'0123456789','##########'),'#'),rpad('#',20,'#')),'#'))

8.4. PostgreSQL

8.4.1.  sql

select datafrom Vorder bycast(replace(translate(data,replace(translate(data,'0123456789','##########'),'#',''),rpad('#',20,'#')),'#','') as integer)

9. 识别字符串里的数字字符

9.1. sql

MIXED
--------------
CL10AR
KI10NG
MI10LL
7369
7566
7788
7876
7902
ALLEN
WARD
MARTIN
BLAKE
TURNER
JAMES

9.2. DB2

9.2.1.  sql

select mixed old,cast(casewhenreplace(translate(mixed,'9999999999','0123456789'),'9','') = ''thenmixedelse replace(translate(mixed,repeat('#',length(mixed)),replace(translate(mixed,'9999999999','0123456789'),'9','')),'#','')end as integer ) mixedfrom Vwhere posstr(translate(mixed,'9999999999','0123456789'),'9') > 0

9.3. Oracle

9.3.1.  sql

select to_number (casewhenreplace(translate(mixed,'0123456789','9999999999'),'9')is not nullthenreplace(translate(mixed,replace(translate(mixed,'0123456789','9999999999'),'9'),rpad('#',length(mixed),'#')),'#')elsemixedend) mixedfrom Vwhere instr(translate(mixed,'0123456789','9999999999'),'9') > 0

9.4. PostgreSQL

9.4.1.  sql

select cast(casewhenreplace(translate(mixed,'0123456789','9999999999'),'9','')is not nullthenreplace(translate(mixed,replace(translate(mixed,'0123456789','9999999999'),'9',''),rpad('#',length(mixed),'#')),'#','')elsemixedend as integer ) as mixedfrom Vwhere strpos(translate(mixed,'0123456789','9999999999'),'9') > 0

9.5. MySQL

9.5.1.  sql

select cast(group_concat(c order by pos separator '') as unsigned)as MIXED1from (select v.mixed, iter.pos, substr(v.mixed,iter.pos,1) as cfrom V,( select id pos from t10 ) iterwhere iter.pos <= length(v.mixed)and ascii(substr(v.mixed,iter.pos,1)) between 48 and 57) ygroup by mixedorder by 1

10. 提取第n个分隔子字符串

10.1. sql

create view V as
select 'mo,larry,curly' as namefrom t1union all
select 'tina,gina,jaunita,regina,leena' as namefrom t1

10.2. sql

SUB
-----
larrygina

10.3. DB2

10.3.1. sql

select substr(c,2,locate(',',c,2)-2)from (
select pos, name, substr(name, pos) c,row_number() over(partition by nameorder by length(substr(name,pos)) desc) rnfrom (
select ',' ||csv.name|| ',' as name,cast(iter.pos as integer) as posfrom V csv,(select row_number() over() pos from t100 ) iterwhere iter.pos <= length(csv.name)+2)  xwhere length(substr(name,pos)) > 1and substr(substr(name,pos),1,1) = ',') ywhere rn = 2

10.4. Oracle

10.4.1.  sql

select subfrom (select iter.pos,src.name,substr( src.name,instr( src.name,',',1,iter.pos )+1,instr( src.name,',',1,iter.pos+1 ) -instr( src.name,',',1,iter.pos )-1) subfrom (select ','||name||',' as name from V) src,(select rownum pos from emp) iterwhere iter.pos < length(src.name)-length(replace(src.name,',')))where pos = 2

10.5. PostgreSQL

10.5.1.  sql

select namefrom (select iter.pos, split_part(src.name,',',iter.pos) as namefrom (select id as pos from t10) iter,(select cast(name as text) as name from v) srcwhere iter.pos <=length(src.name)-length(replace(src.name,',',''))+1) xwhere pos = 2

10.6. MySQL

10.6.1.  sql

select namefrom (select iter.pos,substring_index(substring_index(src.name,',',iter.pos),',',-1) namefrom V src,(select id pos from t10) iter,where iter.pos <=length(src.name)-length(replace(src.name,',',''))) xwhere pos = 2

10.7. SQL Server

10.7.1.  sql

select substring(c,2,charindex(',',c,2)-2)from (select pos, name, substring(name, pos, len(name)) as c,row_number() over(partition by nameorder by len(substring(name,pos,len(name))) desc) rnfrom (select ',' + csv.name + ',' as name,iter.posfrom V csv,(select id as pos from t100 ) iterwhere iter.pos <= len(csv.name)+2) xwhere len(substring(name,pos,len(name))) > 1and substring(substring(name,pos,len(name)),1,1) = ',') ywhere rn = 2

11. 解析IP地址

11.1. 111.22.3.4

11.2. sql

A     B     C     D
----- ----- ----- ---
111   22    3     4

11.3. DB2

11.3.1.  sql

with x (pos,ip) as (values (1,'.92.111.0.222')union allselect pos+1,ip from x where pos+1 <= 20)select max(case when rn=1 then e end) a,max(case when rn=2 then e end) b,max(case when rn=3 then e end) c,max(case when rn=4 then e end) dfrom (select pos,c,d,case when posstr(d,'.') > 0 then substr(d,1,posstr(d,'.')-1)else dend as e,row_number() over(order by pos desc) rnfrom (select pos, ip,right(ip,pos) as c, substr(right(ip,pos),2) as dfrom xwhere pos <= length(ip)and substr(right(ip,pos),1,1) = '.') x) y

11.4. Oracle

11.4.1. sql

select ip,substr(ip, 1, instr(ip,'.')-1 ) a,substr(ip, instr(ip,'.')+1,instr(ip,'.',1,2)-instr(ip,'.')-1 ) b,substr(ip, instr(ip,'.',1,2)+1,instr(ip,'.',1,3)-instr(ip,'.',1,2)-1 ) c,substr(ip, instr(ip,'.',1,3)+1 ) dfrom (select '92.111.0.2' as ip from t1)

11.5. PostgreSQL

11.5.1.  sql

select split_part(y.ip,'.',1) as a,split_part(y.ip,'.',2) as b,split_part(y.ip,'.',3) as c,split_part(y.ip,'.',4) as dfrom (select cast('92.111.0.2' as text) as ip from t1) as y

11.6. MySQL

11.6.1. sql

select substring_index(substring_index(y.ip,'.',1),'.',-1) a,substring_index(substring_index(y.ip,'.',2),'.',-1) b,substring_index(substring_index(y.ip,'.',3),'.',-1) c,substring_index(substring_index(y.ip,'.',4),'.',-1) dfrom (select '92.111.0.2' as ip from t1) y

11.7. SQL Server

11.7.1.   sql

with x (pos,ip) as (select 1 as pos,'.92.111.0.222' as ip from t1union allselect pos+1,ip from x where pos+1 <= 20)select max(case when rn=1 then e end) a,max(case when rn=2 then e end) b,max(case when rn=3 then e end) c,max(case when rn=4 then e end) dfrom (select pos,c,d,case when charindex('.',d) > 0then substring(d,1,charindex('.',d)-1)else dend as e,row_number() over(order by pos desc) rnfrom (select pos, ip,right(ip,pos) as c,substring(right(ip,pos),2,len(ip)) as dfrom xwhere pos <= len(ip)and substring(right(ip,pos),1,1) = '.') x) y

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/83202.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Observable设计模式简介

Observable设计模式存在于许多Java API和响应式编程中。下面介绍Java中永恒的Observable模式。 Observable设计模式用于许多重要的Java API。一个众所周知的示例是使用ActionListenerAPI执行操作的JButton。在这个例子中,我们ActionListener在按钮上进行了监听或…

测评HTTP代理的透明匿名?

在我们日常的网络冒险中,你是否曾听说过HTTP代理的透明匿名特性?这些神秘的工具就像是网络世界中的隐身斗士,让我们能够在互联网的迷雾中保护自己的身份和隐私。那么,让我们一起揭开HTTP代理的面纱,探索其中的奥秘吧&a…

Grafana技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》

阿丹: Prometheus技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》_一单成的博客-CSDN博客 在正确安装了Prometheus之后开始使用并安装Grafana作为Prometheus的仪表盘。 一、拉取镜像 搜索可拉取版本 docker search Grafana拉取镜像 docker pull gra…

Python-OpenCV中的图像处理-边缘检测

Python-OpenCV中的图像处理-边缘检测 边缘检测Canny算子 边缘检测Canny算子 Canny 边缘检测是一种非常流行的边缘检测算法,是 John F.Canny 在 1986 年提出的。它是一个有很多步构成的算法:噪声去除、计算图像梯度、非极大值抑制、滞后阀值等。 Canny(i…

TP、TN、FP、FN的理解

TP、TN、FP、FN的理解 理解英文意思: 在第2个单词的基础上理解第1个单词(即第2个单词是前提条件) TP:True Positive 判定为真的(positive),且判定对了(true) TN&…

【算法|数组】双指针

算法|数组——双指针 引入 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:…

Python Pandas 使用示例

文章目录 使用Boolean 选择rows读取Excel表格里指定的sheet, 并跳过起始n行删除只有一个元素的行删除重复的合并多个csv文件到excel表格中获取csv文件的数据 使用Boolean 选择rows import pandas as pd# Sample DataFrame data {Name: [John, Alice, Bob, Emily],Age: [25, 3…

扫雷(超详解+全部码源)

C语言经典游戏扫雷 前言一.游戏规则二.所需文件三.创建菜单四.游戏核心内容实现1.创建棋盘2.打印棋盘3.布置雷4.排查雷5.game()函数具体实现 五.游戏运行实操六.全部码源 前言 😀C语言实现扫雷是对基础代码能力的考察。通过本篇文章你将学会如何制作出扫雷&#xff…

centos linux 安装RDMA Soft-RoCE|虚拟机安装Soft-RoCE

什么是Soft-RoCE softRoCE的目标是在所有支持以太网的设备上都可以部署RDMA传输,可以使不具备RoCE能力的硬件和支持RoCE的硬件间进行基于IB语义的交流。 大白话就是模拟RDMA的软件栈,使得在没有RDMA网卡的环境上,也可以运行基于RDMA写的传输…

Java-数据类型

数据类型 数据类型基本数据类型整形浮点字符型布尔类字节 引用数据类型类型转换显式转换隐式转换注意事项 整型提升 作为学习Java的入门知识,在刚开始面试的几场,表现不太好的时候,就有几个面试官会问这个问题,估计此时此刻我在他们的心目中也就是这个问题的层次了吧…当然,当时…

Leetcode-每日一题【剑指 Offer 15. 二进制中1的个数】

题目 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 1 的个数(也被称为 汉明重量).)。 提示: 请注意,在某些语言(如 Java&…

postgresql|数据库|角色(用户)管理工作---授权和去权以及usage和select两种权限的区别

前言: postgresql做为一个比较复杂的关系型的重型数据库,不管是安装部署,还是后期的运行维护,都还是有比较多的细节问题需要引起关注。 例如,用户权限的合理分配,那么,什么是权限的合理分配呢…

详解推送Git分支时发生的 cannot lock ref 错误

在码云上建了一个项目仓库,分支模型使用 git-flow ,并在本地新建了一个功能分支 feature/feature-poll。后来在推送时发生错误,提示 cannot lock ref ...... 这样的错误信息。下面复盘一下具体过程和解决办法,以供参考。 在码云中建立仓库时,考虑到想按照 GitFlow 的模式…

Python数据分析实战-格式化字符串的两种方法(附源码和实现效果)

实现功能 格式化字符串的两种方法 实现代码 # 方法一&#xff1a;format方法 query SELECT customer_id, COUNT(*) as num_ordersFROM ordersWHERE date > {start_date} AND date < {end_date} GROUP BY customer_idHAVING num_orders > {min_orders} start_da…

软件安全测试包含哪些内容和方法?安全测试报告的必要性

软件安全测试是一种通过模拟真实攻击的方式&#xff0c;对软件系统进行全面的安全性评估和测试&#xff0c;以发现潜在的安全漏洞和弱点&#xff0c;是确保软件系统安全性的重要措施。在进行软件安全测试时&#xff0c;我们需要了解测试的内容和方法&#xff0c;以及为什么进行…

echarts 图表设置 滚动条

效果图&#xff1a; 代码实现&#xff1a; 第一种方式&#xff1a; 通过 dataZoom 属性缩放进行配置滚动条。 //给x轴设置滚动条 dataZoom: [{start:0,//默认为0end: 100-1500/31,//默认为100type: slider,show: true,xAxisIndex: [0],handleSize: 0,//滑动条的 左右2个滑…

Mysql的instr()函数用法详解

最近接手了一个大型老项目&#xff0c;用到的jfinal技术&#xff0c;后端大部分都是拼写的sql&#xff0c;对一些sql函数不太理解的我算是一个挑战&#xff0c;也是一个进步的很大空间。 今天来说下instr这个函数 首先看下我们的表数据 我们先执行&#xff1a; SELECT * fro…

《Linux运维实战:Docker基础总结》

一、简介 1、docker的基本结构是什么&#xff0c;包含哪些组件&#xff1f; docker的基本机构是c/s模式&#xff0c;即客户端/服务端模式。 由docker客户端和docker守护进程组成。docker客户端通过命令行或其它工具使用docker sdk与docker守护进程通信&#xff0c;发送容器管理…

Qt 6. 其他类调用Ui中的控件

1. 把主类指针this传给其他类&#xff0c;tcpClientSocket new TcpClient(this); //ex2.cpp #include "ex2.h" #include "ui_ex2.h"Ex2::Ex2(QWidget *parent): QDialog(parent), ui(new Ui::Ex2) {ui->setupUi(this);tcpClientSocket new TcpClient…

Redis过期键删除策略

如果一个键过期了&#xff0c;那么它什么时候会被删除呢? 这个问题有三种可能的答案&#xff0c;它们分别代表了三种不同的删除策略&#xff1a; 1.定时删除&#xff1a;在设置键的过期时间的同时&#xff0c;创建一个定时器(timer)&#xff0c;让定时器在键的过期时间来临时…