sql 语句系列(字符串的遍历嵌入删除与统计)[八百章之第十一章]
遍历字符串
我觉得首先要提出一个疑问:
一个数据库本身就是用于存储的,遍历字符串究竟有何意义?
先看如何实现的,毕竟sql service 是没有for循环,也没有loop和while的。
select SUBSTRING(e.ENAME,t.ID,1) as sub
from emp e,T10 t
where e.ENAME='JONES' and t.ID<=len(e.ENAME)
的确是遍历了这个字符串JONES.
原理也十分的简单:
select * from T10
T10 可以看成一个索引集,利用一个笛卡尔积的特性实现的。
加入不是去附加额外的条件:
select e.ENAME,t.ID
from emp e,T10 t
where e.ENAME='JONES'
这就是它的一个简单原理。
回到业务层面,去数据库遍历一个字符串那么本身就不可以,因为数据库不是去计算层面的东西。
一般可用于用户的一些常规性,基本稳定的字段。
我们在查询一个记录的时候如果加上top 1,那么效率最高,因为不需要去遍历整张表。
所以比如用户的一些配置表示这样的:id(用户id) usersetting(某类用户特性).
举例而言:5 xxx,xxx,xxx,xxx,xxx,xxx
后面的xxx,xxx,xxx,xxx,xxx,xxx,是对应的另外一张表的主键,这张表的主键的id是生成的唯一id且长度相等。
那么就可以通过遍历的方式,查询出用户的具体特性。
下面这种:
select *
from xxx
where yy in
(select e.ENAME,t.ID
from emp e,T10 t
where e.ENAME='JONES' )
由于自己水平的限制,这是我唯一遇到的情况,其他的情况也没遇上过。希望有人可以补充更加实用的例子,在此等待学习。
嵌入引号
这里只是接受两个''是一个引号,如果只有''为空,有点绕,看例子。
select 'g''day mate' from t1
select '' from t1
统计字符串出现的个数
通常往往一定,我们用的是正则,但是又碰巧sql service没有正则,这就巧了。
网上有一些文章写sql service 使用正则的,都是基本通过通配符来实现的。
这个就不需要这么麻烦了。
select (len('xxxx,xxxx,xxxx')-len(REPLACE('xxxx,xxxx,xxxx',',','')))/len(',')
from T1
这个例子我第一个例子相对应。
删除不想要的字符
这个直接使用replace 函数替换即可,如果要替换几个,那么多次使用。例子参考上文。
在oracle 中可以使用 translate: replace(translate('你好啊 你好啊',"mm",'你啊'),'m')
上文translate把"你" "啊" 全部换成了m,然后删除m即可。
translate 的第二个参数是每一位是和第三个参数的每一位相对应的。一个你,对应第一个m,第二个啊,对应第二个m,如果没有即为空。
在 sql service 2017以后:
select replace(translate('你好啊 你好啊','mm','你啊'),'m','')
from T1
分离数字和字符数据
和上面的一致,只是分离出数字后,需要用convert(int,'xxx') 转换
select CONVERT(int,REPLACE(translate('dadsawx10','zzzzzzzzzzzzzzzzz','abcdefghijklmnopqrstuvwxyz'),'z','')) as number,REPLACE(translate('dadsawx10','0000000000','0123456789'),'0','') as str
from t1
sql 语句系列(字符串的遍历嵌入删除与统计)[八百章之第十一章]的更多相关文章
- mysql里面如何用sql语句让字符串转换为数字
sql语句将字符串转换为数字默认去掉单引号中的空格,遇到空格作为字符串截止, SELECT '123 and 1=1' +0 结果为123 MySQL里面如何用sql语句让字符串的‘123’转换为数字 ...
- 数据库的SQL语句创建和主外键删除操作
create table UserType ( Id ,), Name nvarchar() not null ) go create table UserInfo ( Id ,), LoginPwd ...
- sql 语句系列(多表之链)[八百章之第三章]
新增连接查询而不影响其他连接查询 请看图: 这种情况我们一般会使用左连接的方式. select e.ENAME,d.LOC,eb.RECEIVED from emp e join dept d on( ...
- sql 语句 截取字符串的两种方案
方案一:使用内置的函数 SUBSTRING,CHARINDEX,LEN三个内置函数 理论: SUBSTRING语法 SUBSTRING ( value_expression , start_exp ...
- ORACLE中通过SQL语句(alter table)来增加、删除、修改字段
1.添加字段: alter table 表名 add (字段 字段类型) [ default '输入默认值'] [null/not null] ; 2.添加备注: comment on ...
- 执行一个内容为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(); ...
- sql 语句系列(null 值处理)[八百章之第二章]
查找只存在一个表中的数据 有两张表: EMP: select * from emp DEPT: 他们有共同的属性:deptno 现在要查询EMP 中的deptno不等于DEPTNO的deptno项. ...
随机推荐
- 添砖加瓦:[OpenCV]入门(一)
1.OpenCV安装 (1)下载: 本文采用的是源码的方式进行安装,源码可以从OpenCV官网下载.这里以3.4.1为例. (2)安装 这里下载到的文件为3.4.1.zip."unzip 3 ...
- Android 粘合剂'Binder'
背景知识 要详细掌握Android 的Binder通信机制需要先提前了解一些通信原理与Linux系统的基础知识. RPC RPC(Remote Procedure Call),即远程过程调用,也被称为 ...
- 在博客中显示图片_Mac版
主要是防止自己忘掉 为了解决一开始自己想在写入的博客中添加本地图片,直接链接的话在自己的电脑倒是可以显示图片,但是在别人的电脑上就没办法加载图片了,问各路大神也没人愿意解答,百度也没有想要的答案,只好 ...
- HTML笔记02
网页中的颜色有三种表示方法 颜色单词:blue.green.red.yellow 10进制表示:rgb(255,0,0).rgb(0,255,0).rgb(0,0,255) 16进制表示:#ff000 ...
- 【简单版】hexo博客搭建流程梳理
前言 本文章会为你梳理一个搭建hexo博客的流程 相关网址: Docs: https://hexo.io/docs/ Themes: https://hexo.io/themes/ 安装hexo 准备 ...
- 第六周学习笔记,vc各类控件的输入输出
6w学习笔记 vc控件的输入输出 单选按钮 当单击 RadioButton 控件时,其 Checked 属性设置为 true,并且调用 Click 事件处理程序.当 Checked 属性的值更改时,将 ...
- win10 pycharm调试技巧 Debug
1.设置断点 2.调试方法对比 step into:单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数): step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行 ...
- 用nodejs+express搭建前端测试服务端
平时开发前端应用,如果没有现成的后端接口调试,又要保证前端进度,该怎么办呢,当然办法还是很多的,很多大牛都分享过很多经验,我也来说说我常用的方法. 请求本地数据文件 把本地数据放到程序指定目录,发起h ...
- [译]介绍一下渐进式 Web App(即时加载) - Part 2
在上一篇,介绍一下渐进式 Web App(离线) - Part 1的文章中,我们讨论了典型的pwa应该是什么样子的并且同时也介绍了 server worker.到目前为止,我们已经缓存了应用壳.在 i ...
- React拖拽组件Dragact V0.1.7:教你优化React组件性能与手感
仓库地址:Dragact手感丝滑的拖拽布局组件 预览地址:支持手机端噢- 上回我们说到,Dragact组件已经进行了一系列的性能优化,然而面对大量数据的时候,依旧比较吃力,让我们来看看,优化之前的Dr ...