05单行函数

函数基本的结构:

返回值 函数名称(列、数据)

1.字符串函数

大小写转换函数:字符串 UPPER(列/字符串数据)

转小写:字符串 LOWER(列/字符串数据)

SELECT DISTINCT LOWER('HELLO')

FROM emp;

例:用户输入

SELECT * FROM emp WHERE ename='&inputname';--这样写的话没法控制用户输入值的大小写,如果用户输入的字母全是小写的会得到无返回值的结果;

改善用户输入:SELECT * FROM emp WHERE ename=UPPER('&inputname');

 

2.首字母大写

字符串 INITCAP(列/数据);

例:将每一个雇员的姓名首字母大写;

SELECT INITCAP(ename) from emp;

 

3.长度LENGTH

SELECT ename, LENGTH(ename) from emp;

SELECT * FROM EMP WHERE LENGTH(ename) =5;

 

4.字符串替换

字符串 REPLACE (列、数据)

例:消除空格

SELECT REPLACE('HELLO WORLD NIHAO ZAIJIAN',' ','') FROM dual;

雇员姓名中有A字母的替换成下划线

SELECT REPLACE(ename,UPPER('a'),'_') FROM emp;

 

5.字符串截取

1)字符串 SUBSTR(列/数据,开始点)

2)字符串 SUBSTR(列/数据,开始点,长度),索引从1开始,即时设置成0 也是从1开始

SELECT SUBSTR(‘helloworldnihao',11) from dual;

 

 例:截取姓名的最后三个字母:

SELECT ename,SUBSTR(ename,-3) from dual; 或者SELECT ename,SUBSTR(ename,LENGTH(ename)-2) from dual;

 

数值函数

四舍五入函数:ROUND(列或数据)(小数点之后的内容直接四舍五入)

SELECT ROUND(13.126,2),保留两个小数点

TRUNC(),直接抹掉小数点,不进位

MOD(),求模,就是余数

 

日期函数

如何表示当前日期,数据伪列,指的是一个列,但是不存在表中,SYSDATE

例:SELECT ENAME,SYSDATE FROM EMP;

表示当前时间:SELECT SYSDATE,SYSTIMESTAMP FROM dual;

对于日期时间提供三种计算模式:

1.日期+数字=日期,表示若干天之后的日期;

2.日期-数字=日期,表示若干之前的日期;

3.日期-日期=数字,表示两个日期间的天数

例:SELECT SYSDATE+10 FROM dual;

例:计算每一位雇员到现在为止的雇佣天数

SELECT ENAME,HIREDATE,SYSDATE-HIREDATE FROM emp;

日期处理函数:

1)两个日期间的月数总和;

SELECT ENAME,MONTHS_BETWEEN(SYSYDATE,hiredate)FROM emp;

2)年限

SELECT ENAME,TRANC(MONTHS_BETWEEN(SYSYDATE,hiredate)/12 ) Years FROM emp;

 

3)增加若干月之后的日期

日期 ADD_MONTHS(日期,月数)

计算四个月后的日期SELECT ADD_MONTHS(SYSYDATE,4) from dual;

 

4.计算指定日期所在月的最后一天 SELECT LAST_DAY(SYSDATE) FROM dual;

例:查询出所有在雇佣所在月倒数第二天被雇佣的雇员信息,先找出所在月最后一天,再用日期-数字=日期的方式;

SELECT ENAME,HIREDATE,LAST_DAY(HIREDATE),LAST_DAY(HIREDATE)-2 FROM emp

WHERE LAST_DAY(HIREDATE)-2=HIREDATE;

 

5.计算下一个指定的日期:日期 next_day(日期,一周时间数)

例:计算下一个周二:

SELECT NEXT_DAY(SYSYDATE,'星期二’)FROM dual;

 

综合分析:要求查询出雇员的编号、姓名、雇佣日期、以及每一位雇员到今天为止所被雇佣的年数、月数、天数;

SELECT empno,ename,hiredate,

TRANC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) YEAR,

TRANC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) MONTH;

RTANC(SYSDATE-ADD_MONTHS(hiredate,MONTHS_BETWEEN(SYSDATE,hiredate))) day

FROM emp;

 

计算年:TRANC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) YEAR,

计算月:TRANC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) MONTH;

计算天数:日期1-日期2;RTANC(SYSDATE-ADD_MONTHS(hiredate,MONTHS_BETWEEN(SYSDATE,hiredate))) day(避免闰年和闰月问题)

 

转换函数:

TO_CHAR()

TO_DATE()

TO_NUMBER()

语法:字符串 TO_CHAR(列或日期或数字,转换格式)

格式化日期:

SELECT TO_CHAR(SYSDATE,'yyy-mm-dd hh:mi:ss')  FROM dual;实际开发中意义不大,只是改变了格式,实际上会破坏程序的一致性;

但是这个tochar可以实现年月日的拆分;

例:求出雇员的姓名、雇佣年份

SELECT ENAME,TO_CHAR(HIREDATE,'yyyy') from emp;

例:求出雇佣月份为2的雇员;

SELECT * from emp WHERE TO_CHAR(HIREDATE,'mm')='2 ' ; 这里用数字2也可以,因为oracle提供了自动数据类型转换的功能;

 

数字转换:任意一位数字(9),货币(L)

SELECT TO_CHAR(888847362748,'L999,999,999,999,999') FROM dual;

 

转日期函数:TO_DATE()函数:SELECT TO_DATE(‘1989-12-1’,'yyy-mm-dd‘ )  FROM dual;

 

 通用函数,ORACLE自己的函数

 NVL(列/NULL,为空默认值);处理null,空的列用0来代替NVL(comm,0)才能正常进行数学运算,不然空值计算结果都是空值;

计算出每一个雇员的年薪,基本工资加上薪金

SELECT empno,ename,job,sal,comm,NVL(comm,0),(sal+NVL(comm,0))*12 income FROM emp;

 

DECODE();多数值判断,根据不同输出结果做数据转换,针对每一列值转换

例:将雇员的职位转换为中文

SELECT ename,job,DECODE(job,'CLERK','办事员’,'SALESMAN','销售员','暂无此信息');--未转换的默认为‘暂无此信息’,如果不加默认值,则显示为空;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值