遍历字符串

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

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

先看如何实现的,毕竟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. java.lang.ClassNotFoundException :xxxxxxx

    码的!java.lang.ClassNotFoundException: org.springframework.jdbc.core.RowMapper这个错误搞了半天 因为写的项目是手动建的WEB- ...

  2. mysql关系型数据库

    参考:https://www.cnblogs.com/alex3714/articles/5950372.html 关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数 ...

  3. SWUST OJ 东6宿舍灵异事件(0322)

    东6宿舍灵异事件(0322) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 88 Accepted: 31   Descriptio ...

  4. Autotestplat体验中心

    web端 移动端 可戳[阅读原文]进行体验

  5. c++中的函数重载、函数重写、函数重定义

    目录 一.函数重载 二.函数重写 三.函数重定义 为了更加深刻的理解 函数重载.重写.重定义,我们可以带着如下这两个问题去思考: 1.子类中是否可以定义父类中的同名成员?为什么? 可以,因为子类与父类 ...

  6. python画一颗拳头大的💗

    用上turtle库后,各种画,今天画个拳头大的爱心@.@. 下面贴下代码: # -*- coding: utf-8 -*- # Nola import pygame import time impor ...

  7. 从头认识js-js客户端检测

    常用的客户端检测方式有以下三种: 1.能力检测 2.怪癖检测 3.用户代理检测 能力检测 最常用也是最为人们广泛接受的客户端检测形式是能力检测(又称特性检测).能力检测的目标不是识别特定的浏览器,而是 ...

  8. pip install mysqlclient报错(OSError: mysql_config not found)

    报错截图 一般情况是系统没有安装libmysqld-dev 执行 sudo apt install libmysqld-dev完成安装后再 pip install mysqlclient就可以了(系统 ...

  9. 用 Java 实现人脸识别功能(附源码)

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...

  10. Yoshino: 一个基于React的可定制化的PC组件库

    Github: https://github.com/Yoshino-UI... Docs: https://yoshino-ui.github.io/#/ Cli-Tool: https://git ...