Oracle坑点大全
Oracle坑点大全
去重distinct
多列去重
select ename,sal from emp; – 每一列都相同才能算重复
dual与字符串拼接
dual虚拟表
– 要计算1+1的值:
select 1+1; --结果为2,mysql的写法
select 1+1 from dual; – oracle中必须加入dual,否则报错
字符串拼接
1、oracle中,使用字符串拼接符 || ,实现拼接效果;
2、拼接只能使用单引号,单引号引起来的是字符串,双引号引起来的是别名;
3、mysql中使用 concat(str1,str2) ,oracle也可以;
select ‘姓名’ || ename from emp;
select concat(‘姓名’,ename) from emp; – 两条语句实现效果一致
SQL语句解析
需求1,查询员工表姓名列包含%的员工
select * from emo where ename like ‘%%%’ escape '\ ';
- escape '\ ‘是告知语句’\ '为转义字符,字符可自定义,何为自定义呢?
select * from emo where ename like ‘%%%’ escape ‘#’;
- 此时‘#’为转义字符;
需求2,根据员工奖金从高到低排序,空值排到后面
select * from emp order by comm desc nulls last;
- 排序值注意,若desc后面没跟任何条件,那么查询的结果,若某员工的奖金为空,那么该员工的记录会排在前面,若加上nulls last,那么员工奖金为空的记录会排在后面,若desc后面没跟任何的语句,默认为nulls first,nulls只能有两个值,即nulls first | last;
需求3,查询部门编号,工资,根据部门升序排序,工资降序排序;
select deptno,sal from emp order by deptno asc,sal desc;
- 同时给多列排序,用逗号分隔;
需求4,统计员工平均奖金
select sum(comm) / count(1) from emp;
select ceil(sum(comm) / count(1) from emp;
- 此时,两条语句只是多了一个ceil方法,那么这个是干什么的呢?下面我们来学习下单行函数;
单行函数(single row fx)
数值函数
- 向上取整ceil
select ceil(45.926) from dual; – 46
- 向下取整
select floor(45.926) from dual;-- 45
- round取余
select round(45.926,2) from dual; – 45.93
select round(45.926,1) from dual; – 45.9
select round(45.926,0) from dual; – 46
select round(45.926.-1) from dual;-- 50
select round(45.926,-2) from dual;-- 0
select round(65.926,-2) from dual;-- 100
截断函数
select trunc(45.926,2) from dual;-- 45.92
- 此时有小伙伴会问了,为啥结果是45.96,而不是46呢,是这样子的,截取是以小数点为基准,截取小数点后的数据,是多少就是多少,如果参数2是2,就截取的是两位小数,是3就是截取三位小数,不会四舍五入;
取余
select mod(9,4) from dual;-- 1
- mod()是取余,有两个参数,param1为被除数,param2位除数,相除后于下的数就是余数;
字符函数
- substr(str1,起始索引,长度)
select substr(‘abcdefg’,0,3) from dual; – abc
select substr(‘abcdefg’,1,3) from dual;-- abc
- 此时,程序员们可能会觉得语句1的结果是abc,语句2的结果是bcd,错,这不是java的substring(),在oracle中,无论起始索引是0还是1,都是从第一个字符开始截取;
获取字符串的长度
- 获取字符串长度length()
select length(‘abcdefg’) from dual;-- 7
替换字符串
- replace(param1,param2,param3),参数接收,param1是原字符串,param2是要被替换的字符串,param3是要替换的字符串,只要一执行改SQL,所有param2的字符都将替换为param3
select replace(‘hello’,‘l’,‘a’); – heaao
日期函数
需求1,查询今天的日期
- 使用sysdate关键字
select sysdate from dual;
查询三个月后今天的日期
- 采用add_months(时间,月份,执行此函数月份会累加三个月
select add_months(sysdate,3) from dual;
查询3天后的日期
- 采用sysdate+3,sysdate先获取系统当前日期,然后加3天即可
select sysdate + 3 from dual;
查询员工入职天数
- 先获取当前日期,减去员工入职日期即可
select ceil(sysdate - hiredate) from dual;
查询员工入职天数
- 采用months_betweeen(当前日期,入职日期) 即可
select months_between(sysdate,hiredate) from emp;
转换函数
字符转数值,是一个鸡肋
- 何为鸡肋,就是转不转都一致
- 字符转数值,to_number(str)
select 100+10 from dual;–110
select 100 + to_number(‘10’) from dual;-- 110
- 结果一致
数值转字符
- 采用to_char(‘原字符’,‘格式化字符’)
select to_char(sal,’$9,999.99’) from emp;
select to_char(sal,‘L9,999.99’) from emp;
- 只要员工薪资大于1000时,千分位自动逗号分隔,$代表的是薪资前面符号表示位,L代表的是薪资前用¥表示,.是小数分隔位,后面的两位数是保留几位小数;
日期转字符
- 使用 to_date(日期,‘格式化日期’) 即可;
select to_char(sysdate,‘yyyy-mm-dd hh:mi:ss’) from dual; – 年月日时分秒
- 格式化日期描述:
- 1,d,代表一个星期中的第几天,从星期天开始计算;
- 2,dd,代表月中的第几天;
- 3,ddd,代表一年中的第几天;
- 4,day,星期几,英文,比如今天是星期一,那么展示出来是monday;
- 5,dy,星期几,英文缩写,星期一,展示出来是mon;
-6,yyyy-mm-dd hh24:mm:dd,24小时展示;
字符转日期,to_date(日期,‘格式化日期’)
通用函数
- nvl(参数1,参数2),如果参数1位null,返回参数2
- nvl2(参数1,参数2,参数3),参数1为null,返回参数3,反之返回参数2;
- nullif(参数1,参数2),参数1=参数2,返回null,反之返回参数1;
- coalesce(…),不定参数,返回第一个不为null的值;
条件表达式
mysql,oracle通用版,case…when…
- 语法:
- case
- when 值1 then 值
- when 值2 then 值
- else 默认值
- end
select case ename
when ‘SMITH’ then ‘刘备小二’
when ‘ALLEN’ then ‘诸葛村夫’
when ‘SCOTT’ then ‘曹贼’
else ‘路人甲’
end ‘姓名’
from emp;
oracle可用decode,可变参数
- 语法:
- decode(字段,if1,then1,if2,then2,else)
select decode(ename,‘SMITH’,‘刘备小二’,‘ALLEN’,‘诸葛村夫’,‘SCOTT’,‘曹贼’,‘路人甲’) from emp;
Oracle坑点大全相关推荐
- oracle中DBWR全称,Oracle基本术语大全
Oracle基本术语大全 §2.4.2 重做日志工作模式Oracle可以在两种模式之一来工作: 1)ARCHIVELOG模式(可恢复) Oracle 一般至少有两个日志文件.它们轮流交替地被写入所作的 ...
- oracle的操作大全,Oracle数据库操作大全(六)Oracle中操作数据
Java连接数据库方法2,(方法1见:Oracle数据库操作大全(五)) 使用jdbc连接Oracle( 可远程连接 ) ***1.加载驱动 Class.forName("oracle.jd ...
- ozf oracle,ORACLE EBS 简称大全
Oracle EBS 缩写术语,搜集中...(from Itpub)2009-09-28 16:46收集一些Oralce EBS常见的缩写术语,持续搜集中-- ORACLE EBS 简称大全 ,i K ...
- Oracle查询所有序列;[oracle中如何创建表的自增ID(通过序列);oracle sql语句大全
Oracle查询所有序列 oracle sql语句大全 oracle中如何创建表的自增ID(通过序列)
- 连载四:Oracle升级文章大全(完结篇)
(共46篇干货文章,建议收藏并在PC端打开) 9.2.0.8 aix 升级11.2.0.4 aix升级后需要检查什么 https://www.modb.pro/db/231 背景:倒计时炸弹11.2. ...
- oracle查询语句大全
oracle查询语句大全 oracle 基本命令大全一 1.create user username identified by password;//建用户名和密码oracle ,oracle 2. ...
- Oracle数据库错误代码大全总结
ORACLE数据库错误代码大全总结 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会 ...
- 连载二:Oracle迁移文章大全
(共45篇干货文章,建议收藏并在PC端打开) 1. ASM新加DG,数据文件如何迁移 https://www.modb.pro/db/307 2. AIX环境dd迁移控制文件出现ORA-202和ORA ...
- oracle 00350,Oracle错误编码大全
ORACLE错误大全2(2009-11-20 18:14:13) 标签:电脑线程日志文件recoveroracle错误大全ora-it 分类:数据库ORA-00201: 控制文件版本与ORACLE 版 ...
最新文章
- html表格鼠标高亮行列,JS实现的表格行鼠标点击高亮效果代码
- HiSDP —— 高效的C++软件开发平台
- 关于子对话框的创建与销毁
- 哈夫曼编码c语言论文,哈夫曼编码的实现及应用论文.doc
- 基于OOS批量修改资源标签值
- java实现磁盘分配显示_Java实现窗体动态加载磁盘文件
- Hadoop的Python框架指南
- 【转】 UML各种线的含义
- Mysql中慢查询Sql的记录查看
- mysql配置文件my.cnf的事例并附解释
- windows 开始命令集
- 外部接口需求怎么写_怎么写财务工作报告?送你16套高逼格财务工作报告范文PPT模板,满足不同行业会计需求!...
- C语言写PCAP文件
- wifi和wlan有什么区别
- 如何有效的屏蔽百度蜘蛛
- 名人博客VS 博客名人
- kubectl rollout restart 命令“unkonw command“
- vivo手机可以适配鸿蒙系统吗,originos系统适配机型 vivo全新手机系统支持哪些机型...
- Git之深入解析如何借助Git的配置方法和钩子机制来自定义Git需求
- C# 提取Word中插入的多媒体文件(视频、音频)
热门文章
- AS的APP接收HC-06蓝牙模块数据
- 朴素贝叶斯情感分析评分python_详解基于朴素贝叶斯的情感分析及Python实现
- Python Flask MongoDB Web开发:前 言
- 实战-Fluxion与wifi热点伪造、钓鱼、中间人攻击、wifi破解
- JAVA SOCKET实现全双工通信
- R语言使用dplyr包的group_by函数和summarise函数基于分组变量计算目标变量的均值、标准差
- 三维视觉精度关键参数及测量方法
- 飞猫盘,一个可以赚钱的网盘副业
- dumpsys cpuinfo结果说明
- Error running docker container: starting container process caused “exec: \“python\“: executable file