目录

SQL 操作符 与 单双引号

Oracle 函数概述

多行函数

数值函数

字符函数

字符串查找函数 Instr()

日期函数

转换函数

通用函数

忽略大小写查询字符串

trunc 截断数字和日期


~~~ 准备员工表与部门表测试数据

SQL 操作符 与 单双引号

1、SQL 操作符的优先级从高到低顺序:算术操作符->连接操作符->比较操作符->NOT->AND->OR

算术操作符:加(+)、减(-)、乘(*)、除(/),其中除号(/)的结果是浮点数。求余运算只能借助函数:MOD(x,y):返回x除以y的余数。   +、-、×、÷
比较操作符

=、!=、<、>、<=、>=、BETWEEN…AND、IN、LIKE 和 IS NULL等

区间查询

  between …… and ……
关键字集合查询   in
模糊查询   like
判断是否为空 is null  或 is not null

逻辑操作符

//select * from emp t where t.sal is not null and t.comm is not null;

与(AND)、或(OR)、非(NOT)

连接操作符号。用于将两个或多个字符串合并成一个字符串,或将一个字符串与一个数值合并在一起

select t.empno,t.ename || '_' || t.sal from emp t ;

两根竖杠 "||",用于将多个字符串或数据值合并成一个字符串

2、Oracle 单双引号

1、Oracle 中字符串用单引号,别名用双引号。

--拼接的字符必须是单引号,别名没有空格时,可以不带引号,有空格时,必须使用引号,且必须是双引号
select t.*,'0000' || 'A' as "编 码" from emp t where t.job = 'MANAGER';-- 两个单引号可以用于转义,如 is ''':第一个是普通的单引号,第二个是对第三个进行转义
SELECT distinct
'comment on column bas_person_log.' || t.COLUMN_NAME ||' is ''' || t.COMMENTS || ''';' as coms
FROM user_col_comments t where t.TABLE_NAME in ('BAS_AGENCY_INFO','BAS_AGENCY_EXT');

Oracle SQL 操作。

Oracle 函数概述

1、Oracle sqL 提供了用于执行特定操作的专用函数,这些函数大大增强了 SQL 语言的功能。函数可以接受零个或者多个输入参数,并返回一个输出结果。 Oracle数据库中主要使用两种类型的函数:

单行函数

对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果,
比如:MOD(x,y)返回 x 除以 y 的余数 (x和y)可以是两个整数,也可以是表中的整数列)

常用的单行函数有:
字符函数:对字符串操作。
数字函数:对数字进行计算,返回一个数字。
转换函数:将一种数据类型转换为另外一种数据类型。
日期函数:对日期和时间进行处理。
聚合函数 聚合函数同时可以对多行数据进行操作,并返回一个结果。比如SUM(x) 返回结果集中ⅹ列的总合。

多行函数

1、对多行的某一列进行处理。常用的有 max()、min()、count()、avg()、sum() 等

select max(sal) from emp;  --取最大值

select max(sal) as max_sal from scott.emp t where t.deptno = 100;

--查询最高薪资。sal 为 null 的值会自动忽略。

--当 select 没有查询到数据时,max_sal会等于null,而不是无记录返回。

select max(to_number(code)) as code from gbm_bs_person_type t

-- 如果字段是字符串类型的数字,则必须先转为数字,否则会出现 '9' 比 '888' 大.

select min(sal) from emp; -取最小值

select min(sal) as min_sal from scott.emp t where t.deptno = 100;

--查询最低薪资。sal 为 null 的值会自动忽略

--当 select 没有查询到数据时,min_sal 会等于null,而不是无记录返回。

select sum(sal) from emp; --求和

select sum(sal) as sum_sal from scott.emp t where t.deptno = 100;

--统计员工薪资总和

--当 select 没有查询到数据时,sum_sal 会等于null,而不是无记录返回。

select sum(comm) from emp; --统计员工奖金总和。为 null 的值会自动忽略
select count(*) from emp; --获取个数 --统计员工总数.
select count(1) as c from scott.emp t where t.deptno = 100; --统计员工总数。建议使用常数代替 "*";当没有数据时,返回 0

select avg(comm) from emp; --求平均值

select avg(sal) as avg_sal from scott.emp t where t.deptno = 100;

--统计平均奖金。当 comm 有 null 值,则计算结果是错误的。

--当 select 没有查询到数据时,avg_sal 会等于null,而不是无记录返回。

select sum(comm)/count(1) from emp; --统计平均奖金。当 comm 有 null 值时,可以使用此种方式

数值函数

数值函数接受数字参数,这些参数可以是表中的列,也可以是一个字符串表达式。

select abs(-100) as val from dual; --求绝对值 --输出 100
select ceil(3.14159) from dual; --向上取整
select ename,job,ceil(sal) from emp; --对所有用户的工资向上取整
select floor(3.14159) from dual; --向下取整
select ename,job,floor(sal) from emp; --对所有用户的工资向下取整
select round(2.14159,3) from dual; --四舍五入。round(x,[y]),y缺省时默认为0
select ename,job,round(sal) from emp; --对所有用户的工资四舍五入

trunc(number,number ) 用于截断浮点型数据,.
第二个参数表示截断小数点后面的第几位,不会进行四舍五入,number 默认为0。如果第一个参数是字符串,则报错。

select trunc(3.14159,3) from dual; --截断小数点后面第3位,输出 3.141
select trunc(3.14159,1) from dual; --截断小数点后面第1位,输出 3.1
select trunc(3.14159,0) from dual; --截断小数点后面第0位,输出 3
select ename,job,trunc(sal,0) from emp; --对薪资进行取整.截断是没有四舍五入的
select mod(10,3) from dual; --mod 求余函数 --输出 1. 
select mod(10,4) from dual; --输出 2.
select mod(10,5) from dual; --输出 0.
select ename ,job, mod(sal,30) from emp; --薪资除以30后的余数

Select power(2,10)  二的十次方 from dual; --求次方

-- power(a,b) :获取的 a 的 b 次方
select Sqrt(16) 十六的开方 from dual;  --求平方 -- sqrt(x) :获取 x 的 二分之一次方

字符函数

字符函数接受字符参数,这些参数可以是表中的列,也可以是一个字符串表达式。

1、concat(字符串1,字符串2) —– 连接字符串,2 个参数

2、lower(str):字符串转小写,upper(str):字符串转大写

select concat('长沙','星城') as citi from dual; --输出 长沙星城
select t.stuid,concat(t.stuname,'·'||t.gender),t.age,t.classno from student t; --拼接用户的姓名与性别,同时中间使用 '·' 符号隔开
select lower('AbcD') from dual; --输出 abcd
select upper('AbcD') from dual; --输出 ABCD
select t.stuid,lower(t.stuname) from student t; --查询学生学号与姓名,姓名中的英文字母转小写输出。
substr(str,startIndex,length):str 被截取的字符串,startIndex 从1开始,0也是表示1.
select substr('ZhangSan',0,3) from dual; --输出 Zha
select substr('ZhangSan',1,3) from dual; --输出 Zha
select substr('ZhangSan',2,3) from dual; --输出 han
select substr('ZhangSan',3,3) from dual; --输出 ang
select substr(ename,1,3) ,job from emp; --截取员工姓名的前3个字符
select length('张无忌') from dual; --输出3  length 函数用于求字符串长度
select length('  张无忌  ') from dual; --输出 7
select length(ename) from emp; --输出所有员工姓名的长度
--ltrim():去左边空格,rtrim():去右边空格,trim():去两边空格
select trim('  张无忌  ') from dual; --输出去掉收尾空格后的 "张无忌".  trim() 函数用于去掉字符串首尾的空格
select length(trim('  张无忌  ')) from dual; --输出 3
select replace('赵敏','敏','敏敏特穆尔') from dual; -- 字符串替换函数 --输出 "赵敏敏特穆尔"     replase函数用于替换字符串中的指定字符
select replace(ename,'A','a') from emp; --替换员工姓名中的大写字母"A" 为 'a'
select ascii('a') as a ,ascii('A') as A,t.dname, ascii(t.dname) as dname from DEPT t; ascii:返回与指定的字符对应的十进制数;

select chr(65) as a ,chr(97) as A,t.deptno, chr(t.deptno) as deptno from DEPT t;

chr:给出整数,返回对应的字符;
select initcap('china') as a ,t.dname, initcap(t.dname) as dname from DEPT t; initcap:返回字符串并将字符串的第一个字母变为大写,其余位置字母为小写;

字符串查找函数 Instr()

1、Oracle 字符串查找函数 Instr() 语法:instr(string, substring [, start_position [, count ]])

1、string :要搜索的目标字符串,字符串可以是 char,varchar2,nchar,nvarchar2,clob 或 nclob 等类型。
2、substring : 要在目标字符串(string)中搜索的子字符串,子字符串可以是 char,varchar2,nchar,nvarchar2,clob 或 nclob 等类型。
3、start_position : 可选。开始检索的位置,目标字符串中第一个位置为 1,不写时默认为 1;如果 start_position 为负数,则表示从后往前检索,如 -1 表示倒数第 1 个字符。
4、count : 可选。substring 子串第 count 次出现的位置,省略时,默认为 1
5、返回值:返回子字符串在目标字符串中出现的位置,如果没有找到,则返回 0.

select empno,ename,
case --职位(job) 以 'A' 开头的设置 html 红色,以 'B'开头的设置 html 蓝色
when instr(job,'A') = 1  then '<span style="color:red">'|| job || '</span>'
when instr(job,'C') = 1  then '<span style="color:blue">'|| job || '</span>'
else job end as job,
mgr,hiredate,sal,comm,deptno
from emp;--数字同样可以查找
select instr(1, 1),instr(1, 2) from dual;-- 输出 1,0
select instr(1, '1'),instr(1, '2') from dual;-- 输出 1,0

日期函数

select sysdate from dual; --输出 Oracle 服务器系统的当前时间
select sysdate + 7 from dual; --查询7天后的当前时间

select add_months(sysdate,3) from dual;

select add_months(sysdate,-1) from dual;

--负数表示减去,即上个月

--查询3个月后的当前时间

ADD_MONTHSI(d,n),在某一个日期d上,加上指定的月数n,返回计算后的新日期。

d表示日期,n表示要加的月数。

select sysdate - hiredate from emp; --查询员工入职的天数。
select round(sysdate - hiredate) from emp; --查询员工入职的天数。对结果进行四舍五入。
select ceil((sysdate - hiredate)/7) from emp; --查询员工入职的周数。结果向上取整
select months_between(sysdate , hiredate) from emp; --查询员工入职的月数
select months_between(sysdate , hiredate)/12 from emp; --查询员工入职的年数

--LAST_DAY(d)

select sysdate,last_day(sysdate) from dual;

返回指定日期当月的最后一天。
select next_day(sysdate,'星期二') from dual; --查询紧邻指定日期最近的下一个星期几
insert into emp(empno, ename, job, mgr, hiredate, sal, comm, deptno)
 values (7854, '张三', 'salesman', 9598, sysdate, 1300.00, 320.00, 30);
--插入数据,日期使用 sysdate 设置
select sysdate,(sysdate) + 30 / (24 * 60 * 60) from dual t;--当前时间加 30秒:2021/9/5 17:13:02   2021/9/5 17:13:32
select sysdate,(sysdate) + 30 / (24 * 60) from dual t;--当前时间加 30分钟:2021/9/5 17:13:38  2021/9/5 17:43:38
select sysdate,(sysdate) + 3 / 24 from dual t;--当前时间加 3小时:2021/9/5 17:14:29   2021/9/5 20:14:29

转换函数

1、转换函数将值从一种数据类型转换为另外一种数据类型,通用的类型转换可以使用 cast 函数数据类型转换

select 100 + to_number('50') from dual; --字符串转数值 --输出 150。to_number(str):字符串转数值
select 100 + '50' from dual; --输出150。默认也会自动转换的。
--to_char(date,'pattern'):日期转字符串
select to_char(sysdate,'yyyy-mm-d hh:mi:ss') from dual; --日期转字符串 --格式化日期为指定格式的字符串。默认为 12小时制
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; --格式化日期为指定格式的字符串。指定为 24小时制
select to_char(sysdate,'yyyy') from dual; --输出年份,如 2019
select to_char(sysdate,'mm') from dual; --输出月份,如 05
select to_char(sysdate,'dd') from dual; --输出日期,如 28
select to_char(sysdate,'hh24') from dual; --输出小时(24小时制),如 15
select to_char(sysdate,'mi') from dual; --输出分钟,如 04
select to_char(sysdate,'ss') from dual; --输出秒钟,如 40
select to_char(sysdate,'dd') from dual; --表示一个月中的第几天
select to_char(sysdate,'ddd') from dual; --表示一年中的第几天
select empno,ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp; --格式化日期输出
select to_char(sysdate,'d') from dual; --表示一个星期中的第几天,1表示星期天,2表示星期1,以此类推
select to_char(sysdate,'day') from dual; --输出当前是星期几,比如:星期五
--to_date('str','pattern'):字符串转日期
select to_date('2019-08-25 09:25:33','yyyy-mm-dd hh:mi:ss') from dual; --输出 2019/8/25 9:25:33。   12小时制时,小时数不能超过12,否则报错。
select to_date('2019-08-25 19:25:33','yyyy-mm-dd hh24:mi:ss') from dual; --输出 2019/8/25 19:25:33。  24小时制
select to_date('2019-08-25 09:25','yyyy-mm-dd hh:mi') from dual; --输出 2019/8/25 9:25:00
select * from emp where hiredate between to_date('1981-06','yyyy-mm') and to_date('1982-07','yyyy-mm'); --查询 1981年6月 到 1982年7月入职的员工
--对当前时间只取 年-月-日
select to_date(to_char(sysdate,'YYYY-MM-DD'),'YYYY-MM-DD') as sydate from dual;

通用函数

1、nvl(param1,param2):如果 param1 等于 null,则返回 param2,否则返回 param1 自身。

2、nvl2(param1,param2,param3):如果 param1 等于 null,则返回 param3,否则返回 param2。

3、nullif(param1,param2):如果 param1 等于 param2 ,则返回 null,否则返回 param1.

4、decode(表达式,值1,结果1,[值2,结果2...][,否则]:select 中实现 if else 功能。

5、coalesce(expression1, expression2, ... :返回列表中第一个非null表达式的值,如果所有表达式求值为null,则返回 null,比如 expression1 结果不为 null 时,则返回它,否则判断expression2结果是否为null,不为 null 时,则返回expression2,依此类推。

千万注意:Oracle 中值为 null 的字段是不能做算术运算的,比如加减乘除、它的结果会恒为 null,此时可以借助 nvl 函数。

update temp set f8 = f1 + f2 + f3 where id = 2;--只要 f1,f2,f3 中有一个值为 null,则 f8 会恒为 null

select nvl(null,'is null') from dual; --输出 is null
select nvl('Hi','is null') from dual; --输出 Hi
select nvl2(null,100,200) from dual; --输出 200
select nvl2('Hi',100,200) from dual; --输出 100
select ename,job,nvl(comm,50) from emp; --没有奖金的员工统一加上 50
select ename,job,nvl2(comm,comm+50,150) from emp; --没有奖金的员工统一加上 150,有奖金的再加上 50
select nullif(100,100) from dual; --输出 null
select nullif(100,120) from dual; --输出 100
select t.*,decode(t.job,'MANAGER','经理','CLERK','办事员','SALESMAN','推销员','普通员工') as personRank from emp t;
select EMPNO,ENAME,JOB,MGR,HIREDATE,sal,coalesce(COMM,0) as COMM,DEPTNO from emp; -- 如果奖金为 null,则输出0

忽略大小写查询字符串

1、当想要忽略大小写查询字符串时,可以通过如下方式进行查询

-- 方式1:参数与数据库值统一转为大写进行查询
SELECT T.* FROM emp t where upper(t.ename) = upper('Scott');
-- 方式2:参数与数据库值统一转为小写进行查询,
SELECT T.* FROM emp t where lower(t.ename) = lower('Scott');
-- 方式2 initcap 函数,将字符串的第一个字母变为大写,其余位置字母为小写
SELECT T.* FROM emp t where initcap(t.ename) = initcap('Scott');

trunc 截断数字和日期

1、TRUNC 函数用于对值进行截断,通常用于截断数字和日期

2、格式:TRUNC(suorce, length),source 表示被截断的数字,length 表示保留小数位数,或者是日期的格式项 yyyy,mm,dd hh,hh24,mi,ss 。

3、trunc 截断小数时不会四舍五入。

4、length 为空时,默认截断所有小数位,为负数时表示截取整数,截断的整数用0替代。

5、length 为空时,默认截断日期的年月日,舍弃时分秒。

截断数字示例:

select trunc(3.14159) from dual;--3
select trunc(3.14159,0) from dual;--3
select trunc(3.14159,1) from dual;--3.1
select trunc(3.14159,3) from dual;--3.141
select trunc(314159.67767,-3) from dual;--截取整数 314000
select ename,job,trunc(sal,0) from emp;--对薪资进行取整.截断是没有四舍五入的

截断日期示例:

select sysdate,trunc(sysdate,'yyyy') from dual;-- 截取到年:2021/9/5 16:48:05  2021/1/1
select sysdate,trunc(sysdate,'mm') from dual;-- 截取到月:2021/9/5 16:48:05  2021/9/1
select sysdate,trunc(sysdate,'dd') from dual;-- 截取到天:2021/9/5 16:48:05   2021/9/5
select sysdate,trunc(sysdate,'hh24') from dual;-- 截取到时:2021/9/5 16:48:05   2021/9/5 16:00:00
select sysdate,trunc(sysdate,'mi') from dual;-- 截取到分:2021/9/5 16:48:05   2021/9/5 16:48:00
select sysdate,trunc(add_months(sysdate,-1),'mm') from dual;-- 获取上月第一天 2021/9/5 16:48:05   2021/8/1
select sysdate,trunc(sysdate) from dual;-- 获取今天的日期:2021/9/5 16:48:05   2021/9/5
select sysdate,trunc(sysdate,'d') from dual;-- 获取当前星期的第一天(星期天) 2021/9/5 16:48:05  2021/9/5

Oracle 基本函数-数值、字符、 Instr()、日期、转换、SQL 操作符、trunc 截断相关推荐

  1. oracle 日期改字符格式_oracle怎么把数值型日期转换成日期字符型

    展开全部 oracle把数值型日期转换bai成日期字符du型的操作方法和详细步骤zhi如下: 1.首先dao,将字符串类型版转换为权数字类型. 此方法使用to_number()直接进行转换. 具体语法 ...

  2. oracle 日期改字符格式_oracle 日期转换格式

    在网上看见不少oracle新学者对oracle的时间格式很烦,经常是设计了一个带时间字段的表之后,向表插入数据失败.回想起自己刚开始学习oracle时,也对这个时间格式摸不着头脑,虽然是小小的问题,高 ...

  3. 20,sql 测试 : 1.4g 文件的 sql 运行测试,表关联,日期转换,字符编码,乱码解决,程序的 shell 执行,字符串转数字,三个隐式转换,用列分区,输出,sum over

    一 ,基础操作 : 1 ,表关联 : select stock.area,goods.smallLei,goods.typeColorId,weekofyear(to_date(stock.sellD ...

  4. Oracle SQL实现日期转换时间戳时间戳转化日期

    Oracle SQL实现日期转换时间戳时间戳转化日期 -- 日期转换为毫秒级时间戳  24*60*60 *1000 SELECT (to_date('2019/4/11 14:45:43'       ...

  5. oracle 日期转换成毫秒数,ORACLE:毫秒与日期的相互转换,获取某天的信息

    毫秒转换为日期 SELECT TO_CHAR(1406538765000 / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY- ...

  6. sql to_char 日期转换字符串

    sql to_char 日期转换字符串 1.转换函数 与date操作关系最大的就是两个转换函数:to_date(),to_char() to_date() 作用将字符类型按一定格式转化为日期类型: 具 ...

  7. oracle 并接去掉字符串,ORACLE删除字符-TRIM字符截取-substr查找字符-instr

    TRIM函数,最简单的功能就是来去除字符串的行首和行尾的空格,返回值类型是varchar2; 1.TRIM函数的完整语法描述 TRIM([{{LEADING | TRAILING | BOTH} [ ...

  8. oracle 天转换成月函数_oracle 日期转换格式 函数

    1 oracle对时间格式的数据存贮 oracle数据库中存放时间格式的数据,是以oracle特定的格式存贮的,占7个字节,与查询时显示的时间格式无关,具体哪个字节表示什么,我不太清楚,请高手补充.存 ...

  9. SQL 日期转换函数

    SqlServer日期(convert函数,getdate函数) 函数GETDATE()的返回值在显示时只显示到秒.实际上,SQL Sever内部时间可以精确到毫秒级(确切地说,可以精确到3.33毫秒 ...

  10. 字符转换to_char函数与日期转换to_date函数

    字符转换to_char函数与日期转换to_date函数 多种日期表示格式: YYYY:四位表示的年份 YYY,YY,Y:年份的最后三位.两位或一位,缺省为当前世纪 MM,mm:0112的月份编号 MO ...

最新文章

  1. 人工智能赋能智慧停车 准确预订车位
  2. 跟我学,轻松安装开源ERP软件Open ERP
  3. 普通 项目打包包含第三方jar包
  4. 跨域资源请求(除jsonp以外)的方法
  5. anaconda3+pytorch踩坑
  6. 【解决方案 二十五】如何对Excel表数据进行彻底转置
  7. MI(mutal information)and Entropy
  8. 为什么计算机休眠风扇还转,Win10电脑睡眠但风扇还在转怎么办
  9. aardio - 仿安装界面进行窗口高度调节的方法
  10. 手把手教你使用Python抓取QQ音乐数据!
  11. 【罗塞塔石碑】—My Lover(One.iso)
  12. ESP32自定义分区表
  13. 支付业务名词及释义大全
  14. 大数据技术之_17_Storm学习_Storm 概述+Storm 基础知识+Storm 集群搭建+Storm 常用 API+Storm 分组策略和并发度
  15. mysql显示服务器地址,怎样查看mysql服务器所在地址
  16. 基于函数回调方法对qsort()进行修改,使用冒泡排序实现对不同类型数据的排序
  17. office哪个版本最好用、占用资源最少?
  18. 单位元转换万元怎么转_金额单位元,改成万元,这样的数据有上百个,怎么办?...
  19. oracle分页改写为mysql_mysql和oracle分页
  20. 永磁无刷直流电机与永磁同步电机比较和分析

热门文章

  1. 漫谈 Clustering (追忆篇): Regularized GMM
  2. 拓端tecdat|Matlab正态分布、历史模拟法、加权移动平均线 EWMA估计风险价值VaR和回测Backtest标准普尔指数 SP500时间序列
  3. java递归实现汉字组词穷举_Javascript迭代、递推、穷举、递归常用算法实例讲解...
  4. python实现池化操作
  5. 计算机存储地址如何,计算机内存地址只有5种表现形式吗,为什么?
  6. 华科c语言作业,华中科技大学标准c语言程序设计及应用习题答案
  7. php pacs,PACS系统
  8. 遥感数据集_最新高光谱遥感数据集
  9. Caffe各版本与源码全透析
  10. Linux一些最基本命令