原创:oracle中单行函数介绍 lt;五gt;

article/2025/3/12 2:21:01

  在SQL中有两种函数一种是单行函数,一种是多行函数.在sql与pl/sql中都自带了很多类型的函数,比如有字符、数字、日期、转换和混合型等多种函数用于处理单行数据,因此这些都被称为单行函数.这些函数都可以被用于select、where和oder by等子句中.下面我们就来分析单行函数,在这里我列举了oracle中一些常用的单行函数进行操作.希望你所有收获.
 

Java代码 复制代码  收藏代码
  1. 1、字符串函数是oracle使用最广泛的一种函数.   
  2. LOWER:小写   
  3. UPPER:大写   
  4. INITCAP:首字母大写   
  5. CONCAT:连接   
  6. SUBSTR:截取  (参数,开始,数目)   
  7. LENGTH:返回字符串的长度   
  8. INSTR:(参数,字母) 返回字母出现的位置   
  9. LPAD:(参数,长度,在前补齐参数字母)    
  10. | RPAD:(参数,长度,在后补齐参数字母)   
  11. TRIM :   
  12. REPLACE:(参数,参数[,参数]):第一个参数操作数,第二是要查找的字符,第三个是替换的字符,如果没有第三个就删除查找的字符。   
  13. //查询名称为scott的员工信息 (不区分大小写)   
  14. SQL> select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp  where lower(ename)='scott';   
  15. SQL> select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp  where upper(ename)='SCOTT';   
  16. //查询员工信息 把员工名称与工作连接在一起   
  17. SQL> select empno,concat(ename,job),mgr,hiredate,sal,comm,deptno from emp;   
  18. //查询员工信息 把员工名称与工作连接在一起   
  19.    SQL> select empno,concat(ename||'is work:',job),mgr,hiredate,sal,comm,deptno from emp;   
  20. //查询员工名称中含有O字符的位置   
  21. SQL> select empno,instr(ename,'O'),job,mgr,hiredate,sal,comm,deptno from emp;   
  22. //查询员工名称中含有O字符的位置并且求出了员工名称字符长度   
  23. SQL> select empno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from emp;   
  24. //在查询上面结果中过滤出员工工作从第三字母开始为ERK员工信息    
  25. SQL> select empno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from emp where substr(job,3)='ERK';   
  26. 备注:当含有两个参数的时候,从开始位置直接到参数结束的结束为止   
  27. //在效果同上的同时指明了截取个数为3   
  28.  SQL> select empno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from emp where substr(job,3,3)='ERK';   
  29. //查询员工信息  薪资是10位位数不够在左部分补*填充   
  30. SQL> select empno,ename,job,mgr,hiredate,LPAD(sal,10,'*'),comm,deptno from emp;   
  31. //查询员工信息  薪资是10位位数不够在右部分补*填充   
  32. SQL> select empno,ename,job,mgr,hiredate,RPAD(sal,10,'*'),comm,deptno from emp;   
  33. //查询员工信息  把员工名称中含有S字符去除掉   
  34. SQL> select empno,TRIM('S' from ename),job,mgr,hiredate,10,comm,deptno from emp;   
  35. 等效于:   
  36. SQL> select empno,TRIM( both 'S' from ename),job,mgr,hiredate,10,comm,deptno from emp;   
  37. //查询员工信息  把员工名称中前面有S字符去除掉   
  38. SQL> select empno,TRIM( Leading 'S' from ename),job,mgr,hiredate,10,comm,deptno from emp;   
  39. //等效于   
  40. SQL> select empno,LTRIM( ename,'S'),job,mgr,hiredate,10,comm,deptno from emp;   
  41. //查询员工信息  把员工名称中后面有S字符去除掉   
  42. SQL> select empno,TRIM( trailing 'S' from ename),job,mgr,hiredate,10,comm,deptno from emp;   
  43. 等效于:   
  44. SQL> select empno,RTRIM( ename,'S'),job,mgr,hiredate,10,comm,deptno from emp;   
  45.   
  46.   
  47. 2、数字函数:   
  48. ROUND: 四舍五入    
  49.             ROUND(45.9262)            45.93    
  50. TRUNC:   截断    
  51.             TRUNC(45.9262)            45.92  
  52. MOD: 求余    
  53.             MOD(1600300)          100  
  54. ABS:绝对值   
  55. CEIL:返回大于或等于value的最小整数   
  56. FLOOR:返回小于或等于value的最大整数   
  57. SQRT :返回value的平方根 负数无意义。   
  58. //四舍五入 结果为46    
  59. SQL> select round(45.56) from dual;   
  60. //绝对值 结果为45.56   
  61. SQL> select abs(-45.56) from dual;   
  62. //大于等于最小整数 结果为-45   
  63. SQL> select ceil(-45.56) from dual;   
  64. //小于等于最大整数 结果为-46   
  65. SQL> select floor(-45.56) from dual;   
  66. //求余数 结果为300   
  67. SQL> select mod(1800,500) from dual   
  68. //截取的数的操作数是正数的情况下:只操作小数位  结果为1800.11   
  69. SQL> select trunc(1800.11111,2) from dual;   
  70. //截取的数的操作数是负数的情况下:操作的是小数点之前的位,把操作位小数点之前的位数全部改写成0. 结果就是1000   
  71. SQL> select trunc(1899.11111,-3) from dual;   
  72.   
  73.   
  74.   
  75.   
  76. 3、日期时间函数   
  77. Oracle 中的日期型数据实际含有两个值: 日期和时间。默认的日期格式是 DD-MON-RR.日期时间函数用来返回当前系统的日期和时间、以及对日期和时间类型的数据进行处理运算。   
  78.   
  79. add_months(date,count);在指定的日期上增加count个月   
  80. last_day(date);返回日期date所在月的最后一天   
  81. months_between(date1,dates);返回date1到date2之间间隔多少个月   
  82. new_time(date,this’,’other’);将时间date从this时区转换成other时区   
  83. next_day(day,’day’);返回指定日期或最后一的第一个星期几的日期,这里day为星期几   
  84. sysdate();获取系统的当前日期   
  85. current_timestamp();获取当前的时间和日期值   
  86. round:日期的四舍五入   
  87. trunc 日期的截取   
  88.   
  89. 4、日期的数学运算:   
  90. ?   在日期上加上或减去一个数字结果仍为日期。    
  91. ?   两个日期相减返回日期之间相差的天数。    
  92. ?   可以用数字除24来向日期中加上或减去小时。    
  93.   
  94. //获取系统的当前时间 显示的格式采用默认格式 显示结果:07-4月 -11 11.15.38.390000 上午 +08:00   
  95. SQL> select current_timestamp from dual;   
  96. //获取系统的当前日期值  显示结果:2011-4-7 11   
  97. SQL> select sysdate from dual;   
  98. //为当前日期加上3个月 显示的结果:2011-7-7 11:18:36   
  99. select add_months(sysdate,3) from dual;   
  100. //返回当前月的最后一天 显示的结果:2011-4-30 11:19:4   
  101. select last_day(sysdate) from dual;   
  102. //返回两个日期之间的间隔月是几: 结果为:4   
  103. SQL> select months_between(add_months(sysdate,4),sysdate) from dual;   
  104. //从GMT时区转换成AST时区的日期结果   
  105.  SQL> select new_time(sysdate,'GMT','AST') from dual;   
  106. //返回下一个星期一的日期值   必须写成星期’几’   
  107.  SQL> select next_day(sysdate,'星期一') from dual;   
  108.   
  109.   
  110.   
  111.   
  112. 5、转换函数:   
  113.   隐式转换:在运算过程中由系统自动完成的   
  114.   显式转换:在运算过程中需要调用相应的转换函数实现。   
  115. 隐式转换   
  116. 转换前数据类型 转换后数据类型   
  117. Varchar2 or char    number   
  118. Varchar2 or char    date   
  119. number  Varchar2   
  120. date    Varchar2   
  121.   
  122. 显式转换   
  123. to_char(date,’format’):按照指定的格式format把数字或日期类型的数据转换成字符串   
  124.   
  125. 格式:   
  126.             必须包含在单引号中而且大小写敏感。    
  127.             可以包含任意的有效的日期格式。    
  128.             日期之间用逗号隔开。    
  129.    日期格式如下:   
  130. 格式  举例   
  131. YYYY    2011  
  132. YEAR    TWO THORUSAND AND FOUR   
  133. MM  01  
  134. MONTH   JULY   
  135. MON JUL   
  136. DY  MON   
  137. DAY MONDAY   
  138. DD  03  
  139.   
  140. //把当前日期转换成YYYY/MM/DD的格式   
  141. SQL> select to_char(current_timestamp,'YYYY/MM/DD') from dual;   
  142. //把当前日期转换成YYYY/MM/DD HH24/MI/SS AM的格式   
  143. SQL> select to_char(current_timestamp,'YYYY/MM/DD HH24/MI/SS AM') from dual;   
  144. //DD “of” MONTH   
  145. SQL> select to_char(current_timestamp,'YYYY DD "of" MONTH  HH/MI/SS AM') from dual;   
  146. //把当数字按照$99,999这种方式返回字符串  并且操作数的位数不能够大于5(即$后边的位数)位,否则话结果会是########   
  147. SQL> select to_char(11111,'$99,999') from dual;   
  148.   
  149. to_number(char);把包含了数字格式的字符串转换成数字数据   
  150. to_date(string,’format’);按照指定格式的format把字符串转换成日期数据,如果省略了foramt格式,那么就采用默认的日期格式(DD-MON-YY);   
  151.   
  152. //把当前字符串转换成日期   
  153. SQL> select to_date('2011-02-08','YYYY-MM-DD') from dual;   
  154. //求出两个日期之间相差的天数   
  155. SQL> select to_date('2011-07-15','YYYY-MM-DD')-to_date('2011-02-08','YYYY-MM-DD') from dual;   
  156. //求出两个日期之间相差的周次    
  157. SQL> select (to_date('2011-07-15','YYYY-MM-DD')-to_date('2011-02-08','YYYY-MM-DD'))/7 from dual;   
  158. //对周次进行向上取整   
  159. SQL> select ceil((to_date('2011-07-15','YYYY-MM-DD')-to_date('2011-02-08','YYYY-MM-DD'))/7) from dual;   
  160.   
  161. chartorowid(char);把字符串转换成rowid类型   
  162. rowidtochar(x);把rowid类型转换成字符类型数据   
  163.   
  164. 6、通用函数   
  165.  这些函数适用于任何数据类型,同时也适用于空值:    
  166. NVL (expr1, expr2)   
  167. NVL2 (expr1, expr2, expr3)   
  168. NULLIF (expr1, expr2)   
  169. COALESCE (expr1, expr2, ..., exprn)   
  170.   
  171. nvl()   
  172. 将空值转换成一个已知的值:    
  173. ?   可以使用的数据类型有日期、字符、数字。    
  174. ?   函数的一般形式:   
  175. •   NVL(commission_pct,0)   
  176. •   NVL(hire_date,'01-JAN-97')   
  177. •   NVL(job_id,'No Job Yet')   
  178. //将comm为null替换成0   
  179. SQL> select empno,ename,job,mgr,hiredate,sal,nvl(comm,0),deptno from  emp;   
  180. //在上面的基础上将日期为空替换成给定的日期   
  181. SQL>select empno,ename,job,mgr,nvl(hiredate,to_date('2011-1-10','YYYY-MM-DD')),sal,nvl(comm,0),deptno from  emp;   
  182. //在上面的基础上将job为空替换成redarmy   
  183. SQL> select empno,ename,nvl(job,'redarmy'),mgr,nvl(hiredate,to_date('2011-1-10','YYYY-MM-DD')),sal,nvl(comm,0),deptno from  emp;   
  184. //计算出员工在该月的工资=(薪资+奖金)   
  185. SQL> select empno,ename,job,mgr,hiredate,(nvl(sal,0)+nvl(comm,0)) as "工资",deptno from  emp;   
  186.   
  187. NVL2 (expr1, expr2, expr3) : expr1不为NULL,返回expr2;为NULL,返回expr3。   
  188.    相当于:expr1!=null?exrp2:expr3;   
  189. //计算员工的工资   
  190. SQL> select empno,ename,job,mgr,hiredate,nvl2(comm,sal+comm,sal) as "工资",deptno from  emp;   
  191.   
  192. NULLIF (expr1, expr2) :  相等返回NULL,不等返回expr1    
  193. //注意观察理解   
  194. SQL> select ename as "expr1",job as "expr2",nullif(length(ename),length(job)) from  emp;   
  195.   
  196. ?   COALESCE 与 NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值。    
  197. ?   如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE 。    
  198. SQL> select empno,ename,job,mgr,hiredate,coalesce(comm,sal,10000) as "salll", deptno from  emp;   
  199.   
  200. ?   重点理解:单行函数可以嵌套。嵌套函数的执行顺序是由内到外。    
  201.   
  202. 条件表达式 :IF-THEN-ELSE 逻辑   
  203. CASE expr WHEN comparison_expr1 THEN return_expr1   
  204.          [WHEN comparison_expr2 THEN return_expr2   
  205.           WHEN comparison_exprn THEN return_exprn    
  206.           ELSE else_expr]   
  207. END   
  208.   
  209.   
  210. DECODE(col|expression, search1, result1    
  211.                    [, search2, result2,...,]   
  212.                    [, default])   
  213.   
  214. //为职位是Manager的员工 发放5000元的奖金   
  215. SQL> select ename,job,case job when 'MANAGER' then nvl(sal,0)+5000  end  as "工资" from emp;   
  216.   
  217. //员工的工资   
  218. SQL> select ename ,job,   
  219.   2  case job when 'MANAGER' then nvl(sal,0)+5000+nvl(comm,0)   
  220.   3  else nvl(sal,0)+nvl(comm,0)   
  221.   4  end   
  222.   5  from emp;   
  223. //改写成 decode的写法   
  224. SQL> select ename,job   
  225.   2  ,decode(job,'MANAGER', nvl(sal,0)+5000+nvl(comm,0),   
  226.   3  'CLERK',nvl(sal,0)+nvl(comm,0)+200,   
  227.   4  nvl(sal,0)+nvl(comm,0)) as "工资"  
  228.   5  from emp;   
  229.   
  230. 以上内容版权归redarmy_chen所有,如需转载请附带出处,如有疑问请发送到redarmy_chen@qq.com  

下载所需的sql请点击这里附件中下载


http://chatgpt.dhexx.cn/article/MfLW81GY.shtml

相关文章

EXPDP报错:ORA-60019 creating initial extent of size 14 in tablespace of extent size 8

一、原因概述 和SecureFiles新的LOB架构相关。11g之前叫BasicFiles。在11g如果不特别指定,默认是会创建成BasicFiles LOB。但是在12c之后,LOB列在ASSM管理的表空间。默认都会创建成SecureFiles。 也就是DB_SECUREFILE初始化参数,在11g时&…

oracle 中 /*+ full(表名)*/ 优化详解

文章目录 hint 关键字: /* full(表名)*/可能遇到的问题别名为 "SELxx" hint 关键字: / full(表名)/ 一般来说,sql 优化时,尽量走 index,但不绝对有时候,全表扫描的效率比索引高 索引 和 全表扫…

Docker——Docker 镜像详解

Docker 镜像 Docker镜像是什么Docker镜像加载原理联合文件系统(UnionFS)镜像加载原理镜像分成理解 Commit镜像镜像的总结 Docker镜像是什么 Docker 容器的运行是基于宿主机的内核,通过linux的namespaces来实现隔离,相对于虚拟机而…

Docker镜像使用详解

目录 基础命令使用进阶 容器和虚拟机具有相似的资源隔离和分配优势,但功能不同,因为容器虚拟化的是操作系统而不是硬件。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为独立进程运行。一…

docker镜像下载及docker镜像管理

文章目录 docker镜像下载镜像说明通外网主机上获取镜像官网上查看镜像的详细说明 镜像的命名方式镜像的重命名镜像的删除删除单个删除全部镜像 镜像的打包与解压包默认存放路径说明镜像打包【单个】镜像打包【多个】镜像解压 容器的导出和导入把容器导出为镜像镜像导入为容器 查…

Docker基础 - 仓库,镜像,容器详解

仓库,镜像,容器的关系 我们再回顾下仓库,镜像,容器的关系(这是官网的图) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NBtYxRyR-1683856218077)(null)] Docker 镜像 当运行…

Docker本地镜像推送到私有库

Docker Registry是官方提供的工具,可以用于构建私有镜像仓库 1. 下载镜像Docker Registry docker pull registy 2. 运行私有库Registry,相当于本地有个私有Docker hub docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileg…

docker镜像

docker镜像 文章目录 docker镜像1.镜像的概念2.docker镜像层3.docker存储驱动3.docker registry4.Docker Hub 1.镜像的概念 Docker镜像类似于虚拟机中的镜像,是一个只读的模板,也是一个独立的文件系统,包括运行容器所需的数据。 Docker镜像…

Docker入门教程:本地打包docker镜像

什么是Docker? Dockers是基于Go语言开发的虚拟容器技术。以前我们部署应用通常是将源代码打包成一个jar包运行,这样就会受到运行环境、配置环境的限制,而且程序也不能跨服务器运行。Docker基于Linux容器技术,将Java源代码、运行环…

Docker 镜像

(一)下载实例 (二)镜像基本操作 备注: 相同名称的镜像可以存在多个,即需要不同的tags版本 (三)使用 Dockerfile 定制镜像 (1)介绍 镜像的定制实际上就是定…

Docker (一)之docker镜像库地址

一、关于docker的镜像问题: 当我们想要去拉取一个镜像的时候,初始的时候会去从国外的镜像库里面拉取,速度可想而知;这时我们需要给docker配置一个国内的镜像库: 目前发现docker有2个地方可以配置镜像库的地址&#x…

Docker镜像发布到阿里云和私有库

目录 一、Docker镜像 (一)概述 (二)Docker镜像加载原理 (三)镜像分层结构优势 (四)重点理解 (五)docker commit操作实例 (六)总…

【云原生|Docker】Docker镜像操作

作者:柒号华仔 个人主页:欢迎访问我的主页 个人信条:星光不问赶路人,岁月不负有心人。 个人方向:主要方向为5G,同时兼顾其他网络协议,编解码协议,C/C,linux,云原生等&…

Docker私有镜像仓库是什么?

Docker镜像仓库概述 镜像仓库作为Docker技术的核心组件之一,其主要作用就是负责镜像内容的存储和分发。Docker镜像仓库从使用范围来说分为“公有镜像仓库”和“私有镜像仓库”,公有镜像仓库是可以被任何人使用的,例如Docker公司维护的在线存储…

了解和使用 Docker 镜像仓库

前言 在上文 《了解和使用 Docker》 之后,反响不错,也上了热榜。本来是想直接整理一下容器编排工具 Docker Swarm 和 K8s 博文的,但是半路杀出了这个活动😂,为表敬意,先参与一波吧。 本文主要介绍一下容…

Docker容器之镜像仓库详解

Docker容器之镜像仓库详解 文章目录 Docker容器之镜像仓库详解1. 什么是Docker Image?2. 什么是Docker Registry?3. 镜像相关的操作 本文将集中对镜像、仓库、容器的概念与三者之间的联系进行详细介绍,以及基本的镜像管理操作。 1. 什么是Docker Image&…

docker镜像仓库

一、docker镜像仓库 docker镜像仓库(repository)是集中存放镜像的地方。方便与后续的镜像拉取与上传,便于对镜像的集中管理。镜像仓库一般可分为Docker Hub公共中央仓库和个人或者公司使用的私有仓库,私有仓库如果是个人使用则可…

Docker -- 镜像仓库(搭建私有镜像仓库、向镜像仓库推送镜像、从镜像仓库拉取镜像)

文章目录 1. 镜像仓库1.1 镜像仓库概念 2. 搭建私有镜像仓库2.1.简化版镜像仓库(不推荐)2.2 带有图形化界面版本(推荐)2.2.1 配置Docker信任地址2.2.2 使用DockerCompose部署带有图象界面的DockerRegistry 3. 向镜像仓库推送镜像4…

最全经典 | 机器视觉基础知识汇总

人工智能的小白资源群,这里有最齐全的干货资源,可以和你一样的入门小白一同交流学习亦可以得到专业技术大神的指导。欢迎入群813416857(AI人工智能学习交流),785685380(机器学习技术交流群)&…

机器视觉光源知识总结(二)

更多文章请关注微信公众号:机器视觉专业论坛