Oracle_day1(单行函数)


1.字符函数:


(1)LOWER:将字符转换成大写

(2)UPPER:将字符转换成小写

(3)INITCAP:将字符的首字母大写

注意:别名不要用单引号,否则会出现ORA-00923: 未找到要求的 FROM 关键字

SELECT LOWER('hello WORLD') "字母小写",UPPER('hello WORLD') "字母大写",
       INITCAP('hello WORLD') "首字母大写" 
FROM DUAL;


(4)SUBSTR(a,b):表示从字符串a中的第b位开始(包括b位,从1开始)一直截取到最后

select substr('12345',3)
from dual;


SUBSTR(a,b,c):表示从字符串a中的第b位开始(包括b位)截取c位

select substr('12345',2,2) 
from dual;


(5)length:统计字符数

    lengthb:统计字节数

SELECT LENGTH('中国'),LENGTHB('中国') 
FROM DUAL;


(6)INSTR(a,b):字符串a中如果包含b子串,那么就返回索引位置(从1开始)。不能存在的话返回0.

SELECT INSTR('HELLO WORLD','LL')
FROM DUAL;


(7)LPAD(a,b,c):a表示需要被填充的字符串,b表示字符串和填充的字符串加起来总共多少位,c表示用什么字符进行左填充。

    RPAD:同上,右填充

(8)TRIM(a,FROM b):a要被去掉的字符(长度只能是1),b从这个字符串中去掉a.


(9)REPLACE(a,b,c):a表示要被替换的字符串,b表示将a中哪些个字符串替换掉,c表示替换成什么字符串。

SELECT REPLACE('HELLO WORLD','W','9') 
FROM DUAL;



数字函数:

(1)ROUND(a,b)b缺省为0:四舍五入

SELECT ROUND(45.926,2) 一,ROUND(45.926,1) 二,ROUND(45.926,0) 三,ROUND(45.926,-1) 四,ROUND(45.926,-2) 五 FROM DUAL;

ROUND(45.926,-1):表示四舍五入到十位,这时候看个位,如果大于等于5就进一位,没超就不变。所以结果是50

ROUND(45.926,-2):表示四舍五入到百位,这个时候看十位,十位是4,而百位是0,所以最后结果还是0.

(2)TRUNC(a,b)b缺省为0:截断

SELECT TRUNC(45.926,2) 一,TRUNC(45.926,1) 二,TRUNC(45.926,0) 三,TRUNC(45.926,-1) 四,TRUNC(45.926,-2) 五 FROM DUAL;


2.日期函数:

获取系统时间

SELECT SYSDATE FROM DUAL

SELECT TO_CHAR(SYSDATE) FROM DUAL

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL

精确到毫秒

--更加精确
SELECT TO_CHAR(SYSTIMESTAMP,'YYYY-MM-DD HH24:MI:SS:FF') FROM DUAL;

日期加上一天或减去一天

SELECT (SYSDATE-1) 昨天,SYSDATE 今天,(SYSDATE+1)明天 FROM DUAL;


有了MONTHS_BETWEEN这个函数,象qq用了多少年,直接可以用当前时间减去注册时间就能算出来了,不用单独去用一个字段存储,所以也免去了每年都要去更新用了多少年这个字段

--计算两个时间相差的月份(是非常精确的,包括了2月,和31天30天情况) 如果参数相反,则结果为负数
SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE) FROM EMP;

--向指定日期中加上若干月数ADD_MONTHS

SELECT ADD_MONTHS(SYSDATE,3) FROM DUAL;

--从今天开始算(2013.10.15 星期二),下一个星期二
SELECT NEXT_DAY(SYSDATE,'星期二') FROM DUAL;

--从今天开始算(2013.10.15 星期二),下一个星期三,经过测试发现是这个礼拜的,也就是离当前日期最近的那个
SELECT NEXT_DAY(SYSDATE,'星期三') FROM DUAL;

--查询本月的最后一天 要传入当前日期
SELECT LAST_DAY(SYSDATE) FROM DUAL;

--对日期进行四舍五入(2013.10.15 星期二) 如果以月四舍五入,那么到了16号才会进一个月 15号算当月
SELECT ROUND(SYSDATE,'MONTH') 以月进行, ROUND(SYSDATE,'YEAR') 以年进行 FROM DUAL;

--对日期进行截断(2013.10.15 星期二)  就是当月 和当年
SELECT TRUNC(SYSDATE,'MONTH') 以月进行, TRUNC(SYSDATE,'YEAR') 以年进行 FROM DUAL;


3.转换函数

1.TO_CHAR:将日期转换成字符串

--将日期转换为字符串,如果要在格式化的代码中用自定义的内容,那么就需要在自定义内容上加双引号
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS"今天是" DAY') FROM DUAL;

2.TO_DATE将字符串转换成日期:

--将字符串按照指定格式转换为日期
SELECT TO_DATE('2013-10-15 17:04:54今天是 星期二','YYYY-MM-DD HH24:MI:SS"今天是" DAY') FROM DUAL;

3.TO_CHAR:将数字转换成字符串

--查询员工的薪水:货币符号,两位小数,千位符   将数字按照指定格式转换为字符串
SELECT SAL,TO_CHAR(SAL,'L9,999.99') FROM EMP;

4.TO_NUMBER:将字符串转换成数字

--将字符串按照指定格式还原成数字
SELECT TO_NUMBER('¥800.00','L9,999.99') FROM EMP;


4.通用函数

1.nvl(a,b):表示,如果a为null,则显示b。

SELECT SAL*12+NVL(COMM,0) FROM EMP; 

2.nvl2(a,b.c):当a为null时,返回b,否则返回c

SELECT SAL*12+NVL2(COMM,COMM,0) FROM EMP;




中间不需要逗号

SELECT ENAME,JOB,SAL 涨前,
       CASE JOB WHEN 'PRESIDENT' THEN SAL+1000
                WHEN 'MANAGER' THEN SAL+800
                ELSE SAL+400 
       END 涨后
FROM EMP ;

中间需要逗号

SELECT ENAME,JOB,SAL 涨前,
       DECODE(JOB,'PRESIDENT',SAL+1000,
                  'MANAGER',SAL+800,
                  SAL+400) 涨后的
FROM EMP ;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值