遍历字符串

我觉得首先要提出一个疑问:

一个数据库本身就是用于存储的,遍历字符串究竟有何意义?

先看如何实现的,毕竟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 语句系列(字符串的遍历嵌入删除与统计)[八百章之第十一章]的更多相关文章

  1. mysql里面如何用sql语句让字符串转换为数字

    sql语句将字符串转换为数字默认去掉单引号中的空格,遇到空格作为字符串截止, SELECT '123 and 1=1' +0 结果为123 MySQL里面如何用sql语句让字符串的‘123’转换为数字 ...

  2. 数据库的SQL语句创建和主外键删除操作

    create table UserType ( Id ,), Name nvarchar() not null ) go create table UserInfo ( Id ,), LoginPwd ...

  3. sql 语句系列(多表之链)[八百章之第三章]

    新增连接查询而不影响其他连接查询 请看图: 这种情况我们一般会使用左连接的方式. select e.ENAME,d.LOC,eb.RECEIVED from emp e join dept d on( ...

  4. sql 语句 截取字符串的两种方案

    方案一:使用内置的函数 SUBSTRING,CHARINDEX,LEN三个内置函数 理论: SUBSTRING语法   SUBSTRING ( value_expression , start_exp ...

  5. ORACLE中通过SQL语句(alter table)来增加、删除、修改字段

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

  6. 执行一个内容为SQL语句的字符串

    两种方式:exec (sqlStr);或exec sp_executesql @sqlStr;绝大多数情况下,应使用第二种方式来执行动态sql.因为这种方式能重用执行计划,并且更安全. 参考例子:ht ...

  7. SQL Server中如何让SQL语句对字符串大小写敏感

    在SQL Server中默认对大小写是不敏感的,例如fname='peter'和fname='PETER'结果是一样的.但有时候用户会要求区分大小写,如验证密码等.这种情况下的处理办法就是在字段后加上 ...

  8. sql语句截取字符串

    Postgresql 当中有四种方式获取当前时间.  一:now()      通过now()获取的时间是最完整的时间,包括时区,秒也保留到了6位小数.      select now();     ...

  9. sql 语句系列(null 值处理)[八百章之第二章]

    查找只存在一个表中的数据 有两张表: EMP: select * from emp DEPT: 他们有共同的属性:deptno 现在要查询EMP 中的deptno不等于DEPTNO的deptno项. ...

随机推荐

  1. xshell 常用命令1

    date命令 date命令是显示或设置系统时间与日期. 很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作.延时通常用于脚本执行过程中提供一段等待的时间.日期可以以多种格 ...

  2. connect() failed (111: Connection refused) while connecting to upstream报错处理

    新lnmp环境调试项目时,nginx报错如下: 解决: 发现php-fpm.conf是以套接字方式通信,而nginx是以端口方式通信,见下图: 将nginx.conf修改为如下,重新reload即可

  3. Core Java之7种单例模式

    初始化空 初始化创建 一把锁 两把锁 大专栏  Core Java之7种单例模式"headerlink" title="静态内部类">静态内部类 静态加载 ...

  4. 80 remove duplicates from sorted array 2

    | 分类 leetcode  | Follow up for "Remove Duplicates": What if duplicates are allowed at most ...

  5. uniq命令使用方法

    uniq命令的作用:显示唯一的行,对于那些连续重复的行只显示一次! 接下来通过实践实例说明: [root@stu100 ~]# cat test boy took bat home boy took ...

  6. GIT 使用(二):创建仓库并提交代码

    基本操作 所用命令使用 windows 下安装 git-bash 运行 Table of Contents 先决条件 已经安装了 GIT 客户端 已经设置用户信息 如果没做可以看安装和配置 获取 Gi ...

  7. TCP可靠传输的工作原理

    TCP可靠传输的工作原理 一.停止等待协议 1.1.简介 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数据在分组传输的平均往返时间更 ...

  8. 一行python代码搞定文件分享

    给同事分享文件,如你所知通过聊天工具,网盘或linux命令各种方法,还有一个也可以尝试下:使用一行python代码快速搭建一个http服务器在局域网内进行下载. python3使用: python3 ...

  9. 关于 InnoDB 锁的超全总结

    有点全的 InnoDB 锁 几个月之前,开始深入学习 MySQL .说起数据库,并发控制是其中很重要的一部分.于是,就这样开起了 MySQL 锁的学习,随着学习的深入,发现想要更好的理解锁,需要了解 ...

  10. 关于Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier 解析

    1.Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service和 @Controller 其实这三个跟@Com ...