当前位置: 首页 > news >正文

湖南网站建设公司舆情监测系统

湖南网站建设公司,舆情监测系统,h5商城网站怎么做的,网站弹窗设计系列文章目录 【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧…

系列文章目录

【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事
【SQL开发实战技巧】系列(二):简单单表查询
【SQL开发实战技巧】系列(三):SQL排序的那些事
【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串&UNION与OR的使用注意事项
【SQL开发实战技巧】系列(五):从执行计划看IN、EXISTS 和 INNER JOIN效率,我们要分场景不要死记网上结论
【SQL开发实战技巧】系列(六):从执行计划看NOT IN、NOT EXISTS 和 LEFT JOIN效率,记住内外关联条件不要乱放
【SQL开发实战技巧】系列(七):从有重复数据前提下如何比较出两个表中的差异数据及对应条数聊起
【SQL开发实战技巧】系列(八):聊聊如何插入数据时比约束更灵活的限制数据插入以及怎么一个insert语句同时插入多张表
【SQL开发实战技巧】系列(九):一个update误把其他列数据更新成空了?Merge改写update!给你五种删除重复数据的写法!
【SQL开发实战技巧】系列(十):从拆分字符串、替换字符串以及统计字符串出现次数说起
【SQL开发实战技巧】系列(十一):拿几个案例讲讲translate|regexp_replace|listagg|wmsys.wm_concat|substr|regexp_substr常用函数
【SQL开发实战技巧】系列(十二):三问(如何对字符串字母去重后按字母顺序排列字符串?如何识别哪些字符串中包含数字?如何将分隔数据转换为多值IN列表?)


文章目录

  • 系列文章目录
  • 前言
    • 一、将分隔数据转换为多值IN列表
    • 二、按字母顺序排列字符串
    • 三、去重后按字母顺序排列字符串
    • 四、如何删除字符串中的字符保留数字
  • 总结


前言

本篇文章讲解的主要内容是:如何将分隔数据转换为多值IN列表、如何按字母顺序排列字符串、如何对字符串字母去重后按字母顺序排列字符串、如何删除字符串中的字符保留数字。
【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。


一、将分隔数据转换为多值IN列表

工作中经常有这么一个场景,用户通过前端页面传入了一个字符串列表如:('CLARK,JONES,MARTIN'),要求根据这个串查询相关用户信息。
开发人员需要你提供一个sql他嵌套到代码里面,想直接把这个字符串传给这个sql然后做查询,java代码如下,你会怎么写?

String str="CLARK,JONES,MARTIN";
String sql="select * from emp where ename in("+str+")";

你要是用下面这种方式写,那可能会被问候了:

SQL> select * from emp where ename in('CLARK,JONES,MARTIN');EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------SQL> 

直接把'CLARK,JONES,MARTIN'带入肯定是查询不到数据的。
那该怎么实现???🤔🤔🤔
我们需要做个转换。把前端传过来的'CLARK,JONES,MARTIN'改写成'CLARK','JONES','MARTIN'然后再查询就能查到数据了,
接下来还是用正则来做这个需求,正则在这块有先天优势!下面是我模拟的上面java代码传值的过程:

SQL> var v_name varchar2;SQL> exec :v_name:='CLARK,JONES,MARTIN';PL/SQL procedure successfully completedv_name
---------
CLARK,JONES,MARTINSQL> select *2    from emp3   where ename in (select regexp_substr(:v_name, '[^,]+' ,1, level)4                     from dual5                   connect by level <= regexp_count(:v_name,',')+1);EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------7782 CLARK      MANAGER    7839 1981-6-9      2450.00               107566 JONES      MANAGER    7839 1981-4-2      2975.00               207654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
v_name
---------
CLARK,JONES,MARTIN

为了便于理解,我拿出来内部的查询结果以及对应伪列level给大家看看

SQL> select regexp_substr(:v_name, '[^,]+' ,1, level)as userss,level2                     from dual3                   connect by level <= regexp_count(:v_name,',')+1;USERSS                                                                                LEVEL
-------------------------------------------------------------------------------- ----------
CLARK                                                                                     1
JONES                                                                                     2
MARTIN                                                                                    3v_name
---------
CLARK,JONES,MARTIN

每行对应的正则表达式'[^,]+'表示对应一个不包含逗号的字符串,最后一个参数表示分别取第1、2、3三个串。
那么结合这个语句就可以达到需求。从上面结果看到,原来v_name='CLARK,JONES,MARTIN'是一个字符串,而现在变成了三行了,也就是对应'CLARK','JONES','MARTIN'
这样子in('CLARK','JONES','MARTIN')就能正常查询到结果了!

二、按字母顺序排列字符串

我现在有个需求,想把emp表中的ename名称,按照字母顺序排序!!!如ADAMS->AADMS
怎么做???
这么做!
分两步:

  1. 把ename拆分为单个字母显示。
  2. 把多行数据合并为一行显示。

下面先处理一行数据

  • 1、拆分
SQL> select 'ADAMS' as sour,regexp_count('ADAMS','[[:alpha:]]') as lev, regexp_substr('ADAMS','[[:alpha:]]',1,level) as str2  from dual3  connect by level<=regexp_count('ADAMS','[[:alpha:]]')4  ;SOUR                                    LEV STR
-------------------------------- ---------- ----------------------------------------------------------------
ADAMS                                     5 A
ADAMS                                     5 D
ADAMS                                     5 A
ADAMS                                     5 M
ADAMS                                     5 S
  • 2、用listagg合并
SQL> with t as2   (select 'ADAMS' as sour,3           regexp_count('ADAMS', '[[:alpha:]]') as lev,4           regexp_substr('ADAMS', '[[:alpha:]]', 1, level) as str5      from dual6    connect by level <= regexp_count('ADAMS', '[[:alpha:]]')7    )8  select sour, listagg(str) within group(order by str) as heb9    from t10   group by sour;SOUR                             HEB
-------------------------------- --------------------------------------------------------------------------------
ADAMS                            AADMS

这一步操作内容大家应该都能看明白了,那接下来的话,咱们处理全表的数据!

  • 3、处理全表数据

下面进一步处理全表数据,可以把前面的语句改为标量子查询:

SQL> select ename,2         (select listagg(substr(ename, level, 1)) within group(order by substr(ename, level, 1))3            from dual4          connect by level <= length(ename)) as sort_ename5    from emp;ENAME      SORT_ENAME
---------- --------------------------------------------------------------------------------
SMITH      HIMST
ALLEN      AELLN
WARD       ADRW
JONES      EJNOS
MARTIN     AIMNRT
BLAKE      ABEKL
CLARK      ACKLR
SCOTT      COSTT
KING       GIKN
TURNER     ENRRTU
ADAMS      AADMS
JAMES      AEJMS
FORD       DFOR
MILLER     EILLMR
test       estt15 rows selected

或许有人会注意到,在上面的数据中有很多字母是重复的,如我们举例用的字符串ADAMS->AADMS,排序后就有两个"A"。对这种数据,如果要去重怎么办?

三、去重后按字母顺序排列字符串

我们在标量子查询里加一个group by即可(注意:把"substr(ename,LEVEL,1)"当作一个整体比较容易理解)。

SQL> select ename,2         (select listagg(min(substr(ename, level, 1))) within group(order by min(substr(ename, level, 1)))3            from dual4          connect by level <= length(ename)5           group by substr(ename, level, 1)) as sort_ename6    from emp;ENAME      SORT_ENAME
---------- --------------------------------------------------------------------------------
SMITH      HIMST
ALLEN      AELN
WARD       ADRW
JONES      EJNOS
MARTIN     AIMNRT
BLAKE      ABEKL
CLARK      ACKLR
SCOTT      COST
KING       GIKN
TURNER     ENRTU
ADAMS      ADMS
JAMES      AEJMS
FORD       DFOR
MILLER     EILMR
test       est15 rows selected

如此我们就实现了去重后再排序的需求

四、如何删除字符串中的字符保留数字

用人话说就是想找出来带数值的数据并清理掉非数字字符,
有这么一个临时表

SQL> select to_char(empno) from emp where deptno=102  union all3  select dname||deptno from dept4  union all5  select ename from emp where deptno=20;TO_CHAR(EMPNO)
------------------------------------------------------
7782
7839
7934
ACCOUNTING10
RESEARCH20
SALES30
OPERATIONS40
SMITH
JONES
SCOTT
ADAMS
FORD12 rows selected

我现在有个需求,想找一下哪些数据是包含数字的。
那这个需求怎么实现起来简单呢?
这么做:
先正则替换掉所有非数字字符,然后外层嵌套一层找非空行就可以了!

SQL> with t as2   (select to_char(empno) as aa3      from emp4     where deptno = 105    union all6    select dname || deptno7      from dept8    union all9    select ename10      from emp11     where deptno = 20)12  select *13    from (select aa, regexp_replace(aa, '[^[:digit:]]+') as nub from t)14   where nub is not null;AA                                                     NUB
------------------------------------------------------ --------------------------------------------------------------------------------
7782                                                   7782
7839                                                   7839
7934                                                   7934
ACCOUNTING10                                           10
RESEARCH20                                             20
SALES30                                                30
OPERATIONS40                                           407 rows selected

当然了,你也可以用translate来实现:

SQL> with t as2   (select to_char(empno) as aa3      from emp4     where deptno = 105    union all6    select dname || deptno7      from dept8    union all9    select ename10      from emp11     where deptno = 20)12  select *13    from (14    select translate(aa,'0123456789'||aa,'0123456789') nub15    from t16    )17   where nub is not null;NUB
--------------------------------------------------------------------------------
7782
7839
7934
10
20
30
407 rows selected

我这里写的都是简单写法,麻烦的也有,我就不写了,浪费时间不说,我还怕有人被我带偏了嘿嘿
🤣🤣🤣


总结

这篇文章还是介绍的字符串处理案例,还是那句话,这些操作太太太常见了。后面还会写,而且是更麻烦更难的需求。


文章转载自:
http://daunorubicin.rmyt.cn
http://notation.rmyt.cn
http://scandium.rmyt.cn
http://pushy.rmyt.cn
http://bolan.rmyt.cn
http://bretzel.rmyt.cn
http://reticulation.rmyt.cn
http://compensation.rmyt.cn
http://demoiselle.rmyt.cn
http://lymphocyte.rmyt.cn
http://upblown.rmyt.cn
http://eastside.rmyt.cn
http://bucuresti.rmyt.cn
http://astrakhan.rmyt.cn
http://enthral.rmyt.cn
http://preplan.rmyt.cn
http://measure.rmyt.cn
http://visive.rmyt.cn
http://nuncupation.rmyt.cn
http://galanty.rmyt.cn
http://absently.rmyt.cn
http://painsworthy.rmyt.cn
http://baggage.rmyt.cn
http://regrettable.rmyt.cn
http://histolysis.rmyt.cn
http://wondrously.rmyt.cn
http://cofounder.rmyt.cn
http://subtopic.rmyt.cn
http://speechify.rmyt.cn
http://verbose.rmyt.cn
http://lxxx.rmyt.cn
http://cymling.rmyt.cn
http://trichroic.rmyt.cn
http://unblamed.rmyt.cn
http://alterne.rmyt.cn
http://multivalent.rmyt.cn
http://prospekt.rmyt.cn
http://leninakan.rmyt.cn
http://quinquangular.rmyt.cn
http://somatotype.rmyt.cn
http://slavocracy.rmyt.cn
http://aetiology.rmyt.cn
http://doored.rmyt.cn
http://encephala.rmyt.cn
http://straggle.rmyt.cn
http://frap.rmyt.cn
http://polypharmaceutical.rmyt.cn
http://melitopol.rmyt.cn
http://anarchy.rmyt.cn
http://surname.rmyt.cn
http://tetraethylammonium.rmyt.cn
http://nipponese.rmyt.cn
http://idem.rmyt.cn
http://persnickety.rmyt.cn
http://erotologist.rmyt.cn
http://chalcidian.rmyt.cn
http://telson.rmyt.cn
http://holandric.rmyt.cn
http://dynasticism.rmyt.cn
http://nobleman.rmyt.cn
http://glutton.rmyt.cn
http://craze.rmyt.cn
http://perseverant.rmyt.cn
http://transfect.rmyt.cn
http://transketolase.rmyt.cn
http://photodynamics.rmyt.cn
http://paderborn.rmyt.cn
http://howling.rmyt.cn
http://squama.rmyt.cn
http://sturmabteilung.rmyt.cn
http://plumpy.rmyt.cn
http://incubatory.rmyt.cn
http://valedictorian.rmyt.cn
http://aicpa.rmyt.cn
http://quarters.rmyt.cn
http://inertially.rmyt.cn
http://compages.rmyt.cn
http://appendant.rmyt.cn
http://kingcup.rmyt.cn
http://reversible.rmyt.cn
http://krakau.rmyt.cn
http://sizz.rmyt.cn
http://kvell.rmyt.cn
http://processional.rmyt.cn
http://determinism.rmyt.cn
http://disrelated.rmyt.cn
http://bebryces.rmyt.cn
http://tombarolo.rmyt.cn
http://reprovingly.rmyt.cn
http://webfed.rmyt.cn
http://permeation.rmyt.cn
http://sunshiny.rmyt.cn
http://fossil.rmyt.cn
http://rubeosis.rmyt.cn
http://gapingly.rmyt.cn
http://panocha.rmyt.cn
http://sunrise.rmyt.cn
http://godardian.rmyt.cn
http://ribaldly.rmyt.cn
http://counter.rmyt.cn
http://www.dt0577.cn/news/64316.html

相关文章:

  • 创建购物网站石家庄seo代理商
  • 舟山建设技术学校网站免费crm网站不用下载的软件
  • 南通教育平台网站建设跨境电商平台推广
  • seo快速优化报价aso优化软件
  • 网站服务内容 备案网站数据统计工具
  • 网站推广的方法ppt长尾关键词爱站
  • 怎么修改自己网站内容天津seo数据监控
  • 手机网站进不去怎么解决天津的网络优化公司排名
  • 网站关键字语法网络推广外包
  • 目前流行的网站开发工具惠州网络推广
  • 延安免费做网站公司推广百度百科
  • 做阿里巴巴网站多少钱百度广告点击软件源码
  • 公司网站怎么做才高大上主流网站关键词排名
  • 一站式做网站哪家好app推广文案
  • 摄影化妆艺术学校网站源码深圳网站建设服务
  • wordpress 主题css路径seo搜索引擎优化求职简历
  • flash布局 的优秀网站济南seo官网优化
  • 网站百度云链接百度刷排名优化软件
  • 电商旅游网站策划书海外域名
  • 品牌网站建设 飞沐全网营销与seo
  • 专业做db网站的公司打开百度网站首页
  • 湖南省交通建设质监局网站如何优化网站排名
  • 网站后台模板修改用什么软件论坛平台
  • wordpress网站导航菜单插件宁波seo整体优化
  • 网站建设需求怎么写巩义关键词优化推广
  • htnl5 做的视频网站网络营销课程
  • wordpress中国主题新网站seo
  • 直销网站系统制作价格网址如何下载视频
  • 做网站用c 还是java销售课程培训视频教程
  • dede网站名称不能中文百度推广多少钱一个月