博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Orace】day02_字符串_数值_日期_NULL相关函数
阅读量:4305 次
发布时间:2019-05-27

本文共 4622 字,大约阅读时间需要 15 分钟。

【Orace】day02_字符串_数值_日期_NULL相关函数

1.字符串相关函数

1)CONCAT  ||  --字符串连接操作

SELECT ename||':'||sal
FROM emp;
SELECT CONCAT(ename,comm) FROM emp;

2)LENGTH --查看字符串长度

SELECT ename,LENGTH(ename)
FROM emp;
3)DUAL:伪表

为了满足SELECT语法要求,但是要查询的数据又与现有的表中数据没有关系时使用.

SELECT
  UPPER('hellO'),
  LOWER('HEllo'),
  INITCAP('HELLO WORLD'),
  INITCAP(NULL)
FROM DUAL;
4)TRIM函数:
去除字符串左右两边重复的给定字符(仅能有一个字符)
SELECT TRIM('a' FROM 'aeaaatimeaa aa')
FROM DUAL;
LTRIM与RTRIM 分别去除字符串左,右边的字符
--可以连续去除左边或右边出现的给定字符串中包含给定的字符就去除.

--如果不指定去除的字符串则默认去除空格.

SELECT
  LTRIM('eaeaaatimeaaa','aet'),
  RTRIM('atimeeaae','ae'),
  LTRIM('  HH ')
FROM DUAL;
--结果为 'imeaaa'  'atim'  'HH '
5)补位函数
LPAD,RPAD
LPAD(str1,n,str2)
显示str1的内容,要求显示n为长度,若str1的长度不足n,则在左侧补充若干个str2字符以达到长度.

需要注意str2必须是单个字符.

LPAD常被用来实现“右对齐”,RPAD为“左对齐”.
当显示的位数不足时补齐,若显示的内容长度超过要显示的位数时,
只从左边开始保留要显示的位数个字符显示,剩下的会被去除.
SELECT
  ename,
  LPAD(sal,6,'$'),
  RPAD(job,9,'*#')
FROM emp;
6)SUBSTR函数
截取字符串 --SUBSTR(str,start,len)
截取给定字符串,从指定的位置对应的字符开始连续截取指定个字符.(注:数据库中的下标都是从1开始)
第二个参数可以写0,也相当于从1开始.还可以取负数,负数则是从倒数第几个字符开始截取.
第三个参数可以不指定,若不指定则是截取到字符串末尾,若第三个参数的大小超过了可截取的长度也是截取到末尾.
SELECT SUBSTR('THINKING IN JAVA',-3,3)
FROM DUAL;
7)INSTR函数
INSTR(char1,char2[,n[,m]])
查看char2在char1中的位置.找不到则返回0.
n:从第几个字符处开始查找,若不写默认为1.可以为负数,倒着数第几个.为0的时候返回0.
m:查看出现第几次,若不写默认为1
SELECT INSTR('thinking in java','in',0)
FROM DUAL;
--0

2.数值操作函数

1)ROUND(n[,m])

四舍五入,对n进行,保留小数点后n位.
m可以不写,不写默认为0,相当于保留到整数位

m可以为负数,保留十位以上数字.

SELECT ROUND(45.678,2) FROM DUAL;  --45.68
SELECT ROUND(45.678,0) FROM DUAL;  --46
SELECT ROUND(45.678,-2) FROM DUAL; --0
SELECT ROUND(55.678,-2) FROM DUAL; --100
2)TRUNC函数

参数的含义与ROUND一致,效果仅仅是不进行四舍五入,所以是截取数字.

SELECT TRUNC(45.678,2) FROM DUAL;  --45.67
SELECT TRUNC(45.678) FROM DUAL;    --45
SELECT TRUNC(45.678,0) FROM DUAL;  --45
SELECT TRUNC(45.678,-1) FROM DUAL; --40
SELECT TRUNC(45.678,-2) FROM DUAL; --0
3)MOD求余
MOD(m,n):m/n求余数

若n为0则直接返回m

SELECT ename,MOD(sal,1000)
FROM emp;
4)CEIL和FLOOR
CEIL:返回大于给定参数的最小整数(向上取整)

FLOOR:返回小于给定参数的最大整数(向下取整)

SELECT CEIL(45.678) FROM DUAL;  --46
SELECT FLOOR(45.678) FROM DUAL; --45
SELECT FLOOR(45) FROM DUAL;     --45

3.日期相关函数

1)SYSDATE关键字
该关键字对应ORACLE的一个内部函数,表示一个DATE类型的当前系统时间.
SELECT SYSDATE FROM DUAL;
2)SYSTIMESTAMP关键字
表示当前系统时间的时间戳类型的值.
SELECT SYSTIMESTAMP FROM DUAL;
3)TO_DATE()函数
将一个字符串按照给定的日期格式转换为Date类型的值.
ORACLE中的日期格式需要注意:
若日期格式字符串中出现了非英文与符号的其他字符时,这些字符需要使用双引号括起来.否则会抛
日期格式无法识别的错误.
SELECT
  TO_DATE(
  '2008年08月08日 20:08:08',
  'YYYY"年"MM"月"DD"日" HH24:MI:SS')
FROM DUAL;
4)数据库中的日期是可以比较大小的, 时间晚的大,早的小
可以对一个日期的值进行加法操作,加上一个数字等于加上对应的天数.结果为计算后的日期.
两个日期时间也可以进行减法操作,结果为相差的天数.
SELECT
  SYSDATE-hiredate
FROM emp;
SELECT
  TO_DATE('1993-08-17','YYYY-MM-DD')-
  TO_DATE('1994-03-25','YYYY-MM-DD')
FROM DUAL;
SELECT ename,hiredate FROM emp
WHERE hiredate>TO_DATE('1982-01-01','YYYY-MM-DD');
5)TO_CHAR函数
可以将给定的日期按照给定的格式转换为一个字符串
SELECT TO_CHAR(SYSDATE,'YYYY-DD-MM HH24:MI:SS') FROM DUAL;
SELECT
  TO_CHAR(
    TO_DATE('49-05-06','RR-MM-DD'),
    'YYYY-MM-DD'
  )
FROM dual;
6)LAST_DAY函数
返回给定日期对应的月底日期,返回值依然是Date类型.
eg:
--查看当月月底是哪天?
SELECT LAST_DAY(SYSDATE) FROM DUAL;
--查看09年2月的月底?
SELECT LAST_DAY(
  TO_DATE('20-02-09','DD-MM-RR')
  )
FROM DUAL; --28-2月-09
--查看每个员工入职当月的月底是哪天?
SELECT ename,LAST_DAY(hiredate) FROM emp;
7)ADD_MONTHS函数
对给定的日期加上给定的月.
SELECT ename,
  ADD_MONTHS(hiredate,20*12)
FROM emp;
8)MONTHS_BETWEEN函数
计算两个日期之间相差多少个月
计算是依靠第一个日期减去第二个日期的差计算的
--查看每个员工至今工作了多少个月?
SELECT ename,
  MONTHS_BETWEEN(SYSDATE,hiredate)
FROM emp;
SELECT MONTHS_BETWEEN(SYSDATE,SYSDATE+91) FROM dual;
9)NEXT_DAY函数
返回距离给定日期最近的还没过的周几是哪天
若给定日期与要计算的周几正好是同一天,则算出的是下周.
SELECT NEXT_DAY(SYSDATE,2) FROM dual;  -- 21-9月-15
SELECT NEXT_DAY(SYSDATE,3) FROM dual;  -- 15-9月-15

10)LEAST,GREATEST函数 --比较函数

LEAST:返回给定参数中最小值的
GREATEST:返回给定参数中最大的

参数多少个都可以.

SELECT LEAST(SYSDATE,'10-10月-08') FROM DUAL;
SELECT GREATEST(SYSDATE,'10-10月-08') FROM DUAL;
11)EXTRACT函数
提取当前系统时间中的年:
SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;

4.NULL的相关操作

CREATE TABLE student_qxl(
  id NUMBER(4),
  name CHAR(20),
  gender CHAR(1)
);
desc student_qxl;
INSERT INTO student_qxl VALUES(1000,'LMC','f');
INSERT INTO student_qxl VALUES(1001,'LPZ',null);
INSERT INTO student_qxl (id,name)VALUES(1002,'zwj');
SELECT * FROM student_qxl;
UPDATE student_qxl SET gender = null;
SELECT * FROM student_qxl;
UPDATE student_qxl SET gender = 'f' where id=1000;
SELECT * FROM student_qxl;
SELECT * FROM student_qxl WHERE gender is not null;
1)NULL与任何数字运算结果还是NULL
SELECT ename,sal,comm,sal+comm FROM emp;
2)空值函数
NVL(arg1,arg2)
该函数会判断第一个参数是否为NULL,若是,该函数返回第二个参数的值,否则将第一个参数值返回
所以该函数的作用时将NULL值替换为非NULL值.
SELECT ename,sal,comm,sal+NVL(comm,0) FROM emp;
--查看员工的奖金情况,若有则显显示“有奖金”,没有则显示“无奖金”
NVL2(arg1,arg2,arg3)
当arg1为NULL时,函数返回arg3,否则返回arg2
SELECT ename,comm,NVL2(comm,'有奖金','没有奖金') FROM EMP;

SELECT ename,sal,comm,NVL2(comm,sal+comm,sal) FROM emp;

转载地址:http://cgews.baihongyu.com/

你可能感兴趣的文章
《ASP.NET Web API 2框架揭秘》样章(PDF版本)
查看>>
如何实现跨域!
查看>>
H5 网站支付宝支付(前端部分)包含微信浏览器中的处理方法。
查看>>
2017年年终总结
查看>>
面向对象-组合使用
查看>>
Docker最全教程之使用Node.js搭建团队技术文档站(二十三)
查看>>
潜移默化学会WPF(样式篇)---改造CheckBox,全新metro风格 - AYUI框架 - 博客园
查看>>
WPF - 善用路由事件
查看>>
Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)
查看>>
SqlServer中的UNION操作符在合并数据时去重的原理以及UNION运算符查询结果默认排序的问题...
查看>>
微信小程序把玩(三十七)location API
查看>>
背水一战 Windows 10 (16) - 动画: ThemeAnimation(主题动画)
查看>>
C语言库函数大全及应用实例四
查看>>
c# 操作ini文件
查看>>
thinkphp学习笔记8—命名空间
查看>>
快速构建Windows 8风格应用16-SettingContract原理及构建
查看>>
HTTP相关
查看>>
CodeFirst建模:DataAnotation
查看>>
阅读笔记 火球UML大战需求分析3
查看>>
指针的指针
查看>>