Oracle 函数的简介

1) concat只能连接两个字符串,||可以连接多个字符串

select concat(‘1‘, ‘2‘) from dual;
select ‘1‘||‘2‘||‘3‘ from dual;

2) ceil(n) :取大于等于数值n的最小整数;

floor(n):取小于等于数值n的最大整数;
-- 10
select ceil(9.3) from dual;
-- 9
select floor(9.3) from dual;
-- 9
select ceil(-9.3) from dual;
-- 10
select floor(-9.3) from dual;

3) 表达式:round(number, [decimals])

含义:number表示待处理的数字,decimals表示处理的位数(需要四舍五入)

select round(1234.5678,3) from dual;
-- 1234.568 小数点后三位

select round(1234.5678, -1) from dual;
-- 1230 小数点前一位

4) 表达式:trunc(param, [fmt])

含义:将param字段的值按照fmt规则截取

1,日期

select trunc(sysdate, ‘yyyy‘) from dual --当年的第一天
select trunc(sysdate, ‘mm‘) from dual --当月的第一天
select trunc(sysdate, ‘dd‘) from dual --当前时间(精确到天)
select trunc(sysdate, ‘d‘) from dual --当前星期的第一天
select trunc(sysdate, ‘hh‘) from dual --当前时间(精确到小时)
select trunc(sysdate,‘ mi‘) from dual --当前时间(精确到分钟,没有精确到秒的)

 2,数字

select trunc(123.458, 1) from dual;
-- 123.4 小数点后面一位,不会四舍五入

select trunc(123.458,-1) from dual; 
-- 120 小数点前面一位

5) 表达式:decode(条件, 值1, 翻译值1, 值2, 翻译值2, …值n, 翻译值n, 缺省值)

含义:条件满足值1则返回翻译值1,满足值2则返回翻译值2。。。都不满足,返回缺省值

select id, decode(gender, 1, ‘男生‘, 2, ‘女生‘, ‘其他‘) gender_mean from member

6) lpad与rpad

1,lpad:从左边开始,对字符串使用指定的字符进行填充

2,rpad:从右边开始

3,补足位数:比如需要返回结果是两位数,则1返回为01,11返回为11

lpad( string, padded_length, [ pad_string ] )

注:rpad和lpad只有方向上的不同

string:待处理的字符串

padded_length:返回的字段长度

[ pad_string ]:可选参数;填充的字符 

select lpad(‘abcde‘,10,‘x‘) from dual;
-- xxxxxabcde

select lpad(‘abcde‘,10,‘oq‘) from dual;
-- oqoqoabcde

select lpad(‘abcde‘,2) from dual;
-- ab

 7) upper与lower

select upper(name) from user;
-- upper:全部转换成大写 

select lower(name) from user; 
-- lower:全部转换成小写

8) instr与substr

1,instr()

语法:instr(sourceString,destString,start,appearPosition) → instr(‘源字符串‘ , ‘目标字符串‘ ,‘开始位置‘,‘第几次出现‘);start,appearPosition默认为1

返回值:查找到的字符串的位置

注:位置从1开始计算;返回值为指定字符的第一个字符位置,如果start大于第一个字符位置,取第二个字符位置,以此类推

select instr(‘yuechaotianyuechao‘,‘ao‘) position from dual;
-- 得到6

2,substr()

语法:substr( string, start_position, [ length ] ) → substr(‘目标字符串‘,开始位置,长度)

注:位置从1开始计算;length不填默认为到末尾;start_position为负数代表从右往左

substr(‘This is a test‘, 6, 2) 
-- 得到 is

9) to_date与to_char

1,to_date()

select to_char(sysdate, ‘yyyy-mm-dd hh24:mi:ss‘) from dual;
-- sysdate是当前系统时间select 1, TO_DATE(null) from dual;  //时间为null的用法, 注意要用TO_DATE(null) 

2,to_char()

select to_date(‘2004-05-07 13:23:44‘, ‘yyyy-mm-dd hh24:mi:ss‘) from dual
select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss‘) as nowTime from dual;   --日期转化为字符串  
select to_char(sysdate,‘yyyy‘)  as nowYear   from dual;   --获取时间的年  
select to_char(sysdate,‘mm‘)    as nowMonth  from dual;   --获取时间的月  
select to_char(sysdate,‘dd‘)    as nowDay    from dual;   --获取时间的日  
select to_char(sysdate,‘hh24‘)  as nowHour   from dual;   --获取时间的时  
select to_char(sysdate,‘mi‘)    as nowMinute from dual;   --获取时间的分  
select to_char(sysdate,‘ss‘)    as nowSecond from dual;   --获取时间的秒

10) Order by 

Oracle默认null是最大值

select * from table order by id asc nulls first
--null值始终排前面

select * from table order by id desc nulls last
--null值始终排后面