遍历字符串

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

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

先看如何实现的,毕竟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. resin远程调试debug

    wangqiaowqo Resin 远程debug Resin Windows下提升Resin默认的虚拟机内存大小 httpd.exe -Xmx1024m 参考外部文章 Resin远程debug配置文 ...

  2. Django中加载static无法成功的解决方法

    我试着进入/admin/ 结果它的/static/ 能够正常找到目标文件…真是日了哈*奇了. 我的link标签href=/static/…. 并没有什么问题 试着在urls中加入下面代码,但是没什么用 ...

  3. Spring Boot 鉴权之—— JWT 鉴权

    第一:什么是JWT鉴权 1. JWT即JSON Web Tokens,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519),他可以用来安全的传递信息,因为传递的信息是 ...

  4. springboot 多数据源之错误 HikariPool-1 - jdbcUrl is required with driverClassName.

    数据源连接报错: 之前在1.5.7的版本的时候用该数据源配置没问题,看如下所示 springboot1.5.7配置多数据源: datasource.master.url=jdbc:mysql://lo ...

  5. 导入项目@override 报错处理

    将项目导入MyEclipse中后总有错:@override总是报错,没关系,不用着急,偶来告诉你解决办法. @override报错,鼠标放上去让你移除,是因为你的JDK版本太低,一般JDK是要在1.6 ...

  6. 机器学习的盛宴:NIPS 2015

    作者:微软亚洲研究院实习生:林添 冰雪王国的浪漫 机器学习的盛宴 NIPS(Advances in Neural Information Processing Systems,神经信息处理系统进展大会 ...

  7. 每日一译系列-模块化css怎么玩(译文)

    原文链接:How Css Modules Work 原文作者是Preact的作者 这是一篇关于如何使用Css Modules的快速介绍,使用到的工具是Webpack吊炸的css-loader 首先,我 ...

  8. C++走向远洋——34(友元函数,成员函数和一般函数的区别)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:youyuan.cpp * 作者:常轩 * 微信公众号:Worl ...

  9. 记一次crontab执行和日志生成问题

    一.crontab未执行 crontab里面设置定时任务如下: 1 19 * * * /usr/bin/python3 /home/nola/a.py > /home/nola/logs/a_l ...

  10. 可视化工作流程设计开发OA系统,一两个程序员就搞定!

    随着信息化的发展,越来越多的公司老板要求实现企业审批流程化.一个公司在初期,人员少,流程简单,员工也会经常不按工作流程来走,甚至有些跨部门的工作因为关系原因,没有走工作流程就实施,导致后期出现问题或者 ...