oracle函数(单行函数)
1、字符函数
-- 大小写字符转换函数
-- LOWER(column|expression) 将列或者表达式转换为小写形式
select lower('SQL Function') from dual;
-- UPPER(column|expression) 将列或者表达式转换为大写形式
select upper('SQL Function') from dual;
-- INITCAP(column|expression) 将列或者表达式的首字母换为换大写
select INITCAP('sql function') from dual;
-- 还可以将函数带入WHERE子句
select employee_id,last_name,DEPARTMENT_ID
from EMPLOYEES
where lower(last_name)='whalen';
-- CONCAT(column1|expression1,column2|expression2) 将两个列或表达式连接起来
select concat('Him last name is:',last_name) from employees;
-- SUBSTR(column|expression,m{,n}) 字符串截取 m:从m位置开始截取 n:截取长度是n(n可以省略,如果n省略则截取到最后长度)
select employee_id,substr(job_id,3) from employees;
select employee_id,substr(job_id,3,2) from employees;
-- LENGTH(column|expression) 返回字符的长度
select LENGTH('Hello world!') from dual;
-- INSTR(column|expression,str{,m}{,n}) 检索str在列或表达式中出现的位置,m(数字,选填,表示从m开始检索,默认1)n(数字,选填,表示显示第n次出现的位置,默认1)
select INSTR('Hello world! we are family!','w') from dual;
select INSTR('Hello world! we are family!','w',1,2) from dual;
-- LPAD(column|expression,n,str) RPAD(column|expression,n,str) LPAD左填充,RPAD右填充 ,n:要返回的字符串的长度,str:填充字符串内容
select LPAD('2500',10,'0') from dual;
select RPAD('2500',10,'*') from dual;
-- TRIM(trimStr FROM trimSource|column|expression) 去掉列或表达式左右的空格,或者将trimStr从trimSource的左边或者右边去掉
select TRIM(' Hellow world ') from dual;
select TRIM('H' FROM 'Hellow world') from dual;
-- REPLACE(column|expression,searchStr,replaceStr) 将列或者表达式中的字符串searchStr,替换成replaceStr
select replace('Hello world!','l','5') from dual;
select replace(first_name,'C','5') from employees;
-- 综合:显示员工的姓 名连接在一起的名字、姓的长度、字母A在姓中出现的位置,条件是从job_id的第四个位置截取的字符串转换为小写后等于rep的所有数据
select employee_id,concat(first_name,' '||last_name) as "Name",Job_id,Length(Last_name),Instr(last_name,'a') AS "Contains 's a?"
from employees
WHERE lower(subStr(job_id,4))='rep';
2、数字函数
-- 数字函数
-- ROUND(column|expression,n) 四舍五入取小位点后面n位置,返回一个值 ,如果n=0则在小数点的十分位四舍五入,最终取得一个整数,n=-1则在小数点前一位即个位进行四舍五入
select ROUND(169.367,2) from dual;
select ROUND(169.678,0) from dual;
select ROUND(169.123,-1) from dual;
-- TRUNC(column|expression,n) 对列或者表达式舍掉小数位数n位,返回一个值
select TRUNC(169.167,2) from dual;
select TRUNC(169.987,-1) from dual;
-- MOD(m,n) 求余m:被除数,n:除数
select MOD(123,12) from dual;
select MOD(1600,300) from dual;
3、日期函数
-- 日期函数
-- sysdate 返回当前数据库服务器的时间,current_date 返回当前会话的时间
select sysdate from dual;
select current_date from dual;
-- 日期操作
-- date + number 返回 date 给日期加几天
select sysdate + 3 from dual;
-- date - number 返回 date 给日期减几天
select sysdate - 3 from dual;
-- date - date 返回 数字 表示两个日期之间相差多少天
select employee_id,sysdate-hire_date from employees;
-- date + number/24 返回date 表示给日期添加几个小时
select sysdate + 15/24 from dual;
-- 例:显示员工所参加工作以来工作的所有周数
select employee_id,(sysdate-Hire_date)/7 as "work weeks" from employees;
-- MONTHS_BETWEEN(column|date1,column|date2) 返回两个日期之间相差多少个月,可能是小数
select months_between(sysdate,'2015-01-01') from dual;
select months_between('2015-05-04','2015-01-01') from dual;
-- ADD_MONTHS(column|date,n) 为日期添加几个月,如为负的话就是减几个月
select add_months('2015-05-01',3) from dual;
select add_months('2015-05-01',-3) from dual;
-- NEXT_DAY(date,char) 查找从date开始的下一个星期几的日期,char 星期几
select next_day('2015-05-03','星期六') from dual;
-- LAST_DAY(date) 返回date日期所在月的最后一天
select last_day(sysdate) from dual;
-- ROUND(date,'MONTH') 对天数四舍五入,如果天数部分是1-15则返回的日期是当前月的第一天,如果是16-31则返回的日期是下月的第一天
select round(sysdate,'MONTH') from dual;
-- ROUND(date,'YEAR') 对月分四舍五入,如果月份在1-6个月则返回当前年的1月1号,如果是7-12则返回下一年的1月1号
select ROUND(sysdate,'YEAR') from dual;
-- TRUNC(date,'MONTH') 舍去天数部分,返回当前月的第一天
select trunc(sysdate,'MONTH') from dual;
-- TRUNC(date,'YEAR') 舍部月数和天数部分,返回当前年份的1月1日
select trunc(sysdate,'year') from dual;