ORACLE学习-2.单行函数
oracle函数分为单行函数和多行函数,下面的图能很清楚的说明单行函数和多行函数:
单行函数是指接收一个输入,返回一个输出,包括 字符函数、数值函数、日期函数、转换函数和通用函数:
多行函数和单行函数相比,oracle提供了丰富的基于组的,多行的函数。这些函数能在select或select的having子句中使用,当用于select子串时常常都和GROUP BY一起使用。多行函数分为接收多个输入,返回一个输出。
一、单行函数
1、字符函数
1)、大小写控制函数
/*转小写*/ select lower('HELLOWORD') FROM DUAL;--helloword /*转大写*/ select upper('helloword') FROM DUAL;--HELLOWORD /*首字母大学*/ select initcap('hELLOword') FROM DUAL;--Helloword
2)、字符控制函数
/* 1、连接两个字符*/ select concat('str1','str2') from dual;--str1str2 /* 2、字符串截取,param1:要截取的字符串;param2:开始截取位置;param3:截取的个数*/ select substr('helloword',1,5) from dual;--hello /* 3、判断字符串的长度*/ select length('holleworld') from dual;--10 /* 4、某一个字符串在另一个字符串中首次出现的位置,如果没有返回0*/ select instr('helloword','dd') from dual;--0 select instr('helloword','hello') from dual;--1 /* 5、左对齐 param1:填充的字符串 param2:填充之后的字符串长度,也就是该函数返回的字符串长度,如果这个数量比原字符串的长度要短, lpad函数将会把字符串截取成从左到右的n个字符 param3:填充字符串,是个可选参数,这个字符串是要粘贴到string的左边,如果这个参数未写, lpad函数将会在string的左边粘贴空格 */ select lpad('hello',10,'#') from dual;--#####hello /* 6、右对齐 参数和左对齐的含义一样*/ select rpad('hello',10,'#') from dual;--hello##### /* 7、将一个字符从另一个字符中移除*/ select trim('H' from 'HELLOWORLD') from dual;--ELLOWORLD select trim('A' from 'HELLOWORLD') from dual;--HELLOWORLD select trim('H' from 'HELLOHWORLDH') from dual;--ELLOHWORLD /* 8、替换函数 replace(param1,param2,param3),将param1中的param2替换成param3,将所有的param2都替换成param3 */ SELECT REPLACE('helloword','o','O') FROM DUAL;--hellOwOrd
2、数字函数
/* 1、四舍五入*/ select round(123.456),round(123.556),round(123.456,2),round(435.45,-2),round(435.45,-5),round(435.45,5) from dual; --123 124 123.46 400 0 435.45 /* 2、截断 param1为必要参数,是输入的一个日期值 param2参数可忽略,是日期格式 */ /*1>、截取时间到年时,yyyy也可用year替换*/ select trunc(sysdate,'yyyy') from dual; --2018/1/1 /*2>、截取时间到月时*/ select trunc(sysdate,'mm') from dual;--2018/4/1 /*3>、截取时间到日时*/ select trunc(sysdate,'dd') from dual;--2018/4/28 /*4>、截取时间到小时时*/ select trunc(sysdate,'hh') from dual;--2018/4/28 9:00:00 /*5>、截取时间到分钟时*/ select trunc(sysdate,'mi') from dual;--2018/4/28 9:48:00 /* 3、求余 mod(nExp1,nExp2),即是两个数值表达式作除法运算后的余数 */ select mod(10,3) from dual;--1
3、日期函数
1)、在日期上加上一个数或者减上一个数仍为日期;
2)、两个日期相减返回之间相差的天数,日期不允许做加法(没意义);
3)、用数字除24向日期中加上或者减上天数;
/*日期函数*/ select sysdate,sysdate+1,sysdate-3 from dual; --2018/4/28 9:58:37 --2018/4/29 9:58:37 --2018/4/25 9:58:37 /*判断两个日志之间相差的月份*/ select months_between(sysdate,sysdate-35) from dual;--1.12903225806452 /*向指定的日期中加上若干个月*/ select add_months(sysdate,2),add_months(sysdate,-3) from dual; --2018/6/28 10:03:05 --2018/1/28 10:03:05 /*当前日期开始得到到未来星期数的日期*/ select sysdate,next_day(sysdate,'星期日'),next_day(sysdate,'星期二'),next_day(sysdate,'星期六') from dual; --2018/4/28 10:07:30 --2018/4/29 10:07:30 --2018/5/1 10:07:30 --2018/5/1 10:07:30 /*获取本月的最后一天*/ select last_day(sysdate) from dual; /*其它日期处理*/ select round(sysdate,'month'),round(sysdate,'mm') from dual;--'month'和'mm'一样 --2018/5/1 2018/5/1 select round(sysdate,'year') from dual;--2018/1/1 select sysdate,trunc(sysdate,'year'),trunc(sysdate,'month') from dual; --2018/4/28 10:12:26 --2018/1/1 --2018/4/1
4、转换函数
分为隐式转换和显示转换,如图:
隐式类型转换:oracle自动完成下列的转换
源数据类型 | 目标数据类型 |
varchar2 or char | number |
varchar2 or char | date |
number | varchar2 |
date | varchar2 |
date <======>varchar2<======>number
例如:
select '12'+2 from dual;--14 select sysdate+2 from dual;--2018/4/30 10:19:20 select 123,123,123.24+2 from dual;---123 123 125.24
显示类型转换:
/*char和date之间的转换*/ SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL;--2018-04-28 SELECT TO_DATE('2018-04-28','YYYY-MM-DD') FROM DUAL;--2018/4/28 SELECT TO_DATE('2018-04-28','YYYY/MM/DD') FROM DUAL;--2018/4/28 SELECT TO_char(sysdate,'YYYY"年"MM"月"DD"日"') FROM DUAL;--2018年04月28日 /*char和number之间的转换*/ SELECT TO_CHAR(1234567.89,'999,999,999.99') FROM DUAL;--1,234,567.89 SELECT TO_CHAR(1234567.89,'000,000,99.99') FROM DUAL;--012,345,67.89 SELECT TO_CHAR(1234567.89,'000,000,999.99') FROM DUAL;-- 001,234,567.89 SELECT TO_CHAR(1234567.89,'$00,000,999.99') FROM DUAL;-- $01,234,567.89 /*(本地的钱符号)*/ SELECT TO_CHAR(1234567.89,'L00,000,999.99') FROM DUAL;--¥01,234,567.89
to_char()函数对数字的转换过程中,下面是to_char()函数经常用到的几种格式:
9 | 数字 |
0 | 零 |
$ | 美元 |
L | 本地货币符号(用local理解) |
. | 小数点 |
, | 千位符号 |
to_number('¥001,234,567,89','L000,000,99.99')可以做运算,我想如果你在美国,就要将¥换成$了;