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项. ...
随机推荐
- 维生素D补充过多会中毒
虽然我们的物质生活越来越丰富,各种食材几乎一年四季都能够吃到,然而却越来越多的人选择进行补充各种维生素,但是你知道吗?维生素不是我们想象中多吃无害的,补充过多也会要人命,特别是最近非常流行补充的一种维 ...
- 纯js文件弹出窗写法
<dialog id="myDialog"> 01234567890 <a href="javascript:;" id="clos ...
- Python【map、reduce、filter】内置函数使用说明
题记 介绍下Python 中 map,reduce,和filter 内置函数的方法 一:map map(...) map(function, sequence[, sequence, ...]) -& ...
- SpringCloud Ribbon组成和负载均衡规则
Ribbon饥饿加载 默认情况下Ribbon是懒加载的.当服务起动好之后,第一次请求是非常慢的,第二次之后就快很多. 解决方式:开启饥饿加载 ribbon: eager-load: enabled: ...
- GO - if判断,for循环,switch语句,数组的使用
1.if - else if - else的使用 package main import "fmt" func main() { // 1.简单使用 var a=10 if a== ...
- Spring事务Transactional和动态代理(一)-JDK代理实现
系列文章索引: Spring事务Transactional和动态代理(一)-JDK代理实现 Spring事务Transactional和动态代理(二)-cglib动态代理 Spring事务Transa ...
- java网络编程——socket实现简单的CS会话
还记得当年学计网课时用python实现一个简单的CS会话功能,这也是学习socket网络编程的第一步,现改用java重新实现,以此记录. 客户端 import java.io.*; import ja ...
- Jsp页面中动态的引入另一个jsp,jsp:include路径是变量的实现
1 问题描述 在页面搭建时,会有这样的需求,希望局部页面动态的引用另一个jsp.这里的"动态"的意思引用的jsp的路径是个变量.举个例子,我们希望局部页面可能是page1.jsp或 ...
- 前端面试题-HTML语义化标签
一.HTML5语义化标签 标签 描述 <article> 页面独立的内容区域. <aside> 页面的侧边栏内容. <bdi> 允许您设置一段文本,使其脱离其父元素 ...
- Protocol buffers编写风格指南
原文链接:https://developers.google.com/protocol-buffers/docs/style Style Guide 本文说明了.proto文件的编写风格指南.遵循这些 ...