SQL函数有两种
1、 单行行数:字符函数、数值函数、日期函数、转换行数、通用行数
2、 多行行数
字符行数:
2.1大小写控制函数:LOWER、UPPER、INITCAP
2.2字符控制函数: CONCAT、SUBSTR、LENGTH、INSTR、LPAD | RPAD、TRIM、REPLACE
字符控制函数
函数 | 结果 | 意思 |
---|---|---|
CONCAT(‘Hello’, ‘World’) | HelloWorld | 字符“合并” |
SUBSTR(‘HelloWorld’,1,5) | Hello | 字符“截断”在第几个到几个 |
LENGTH(‘HelloWorld’) | 6 | 找什么字母在第几个位置 |
INSTR(‘HelloWorld’, ‘W’) | 10 | 字符的长度 |
LPAD(salary,10,’*’) | *****24000 | 左填充 |
RPAD(salary, 10, ‘*’) | 24000***** | 右填充 |
TRIM(‘H’ FROM’HelloWorld’) | elloWorld | 去左右空格或左右字符 |
REPLACE(‘abcd’,’b’,’m’) | Amcd | 字符替换 |
数字函数:
--四舍五入方法
select round(48.923,2)as"1四舍五入一位"
,round(48.923,0)as"2默认四舍五入"
,round(48.923,-1)as"3四舍五入"
from dual;
--截断
select trunc(48.923,2)as"1截断两位"
,trunc(48.923,0)as"2默认截断"
,trunc(48.923,-2)as"3截断"
from dual;
--求余
select last_name,salary,mod(salary,5000) as"求余"
from employees
where job_id = 'SA_REP';
日期函数
Oracle 中的日期型数据实际含有两个值: 日期和时间。
日期的数学运算
• 在日期上加上或减去一个数字结果仍为日期。
• 两个日期相减返回日期之间相差的天数。
– 日期不允许做加法运算,无意义
• 可以用数字除24来向日期中加上或减去天数。
如列提
--两个日期相差的月数(months_between)
select months_between('01-3月-19','01-1月-19')月数 from employees;
--向指定日期中加上若干月数(add_months)
select add_months('01-1月-19',6)from employees;
--指定日期的下一个星期几对应的日期(next_day)
select next_day('18-3月-19','星期一')from employees
--本月的最后一天(last_day)
select last_day('18-3月-19') from employees
--月份的四舍五入
select round(to_date('1987-09-17','yyyy-mm-dd'),'month') from employees
--年份的四舍五入
select sysdate,round(sysdate,'year') from employees;
--日期截断(trunc)
select sysdate,trunc(sysdate,'month')"月份截断"
,trunc(sysdate,'year')as "年份截断"
from employees;
显式数据类型转换
将空值转换成一个已知的值:
• 可以使用的数据类型有日期、字符、数字。
• 函数的一般形式:
– NVL(commission_pct,0)
– NVL(hire_date,‘01-JAN-97’)
– NVL(job_id,‘No Job Yet’)
使用 NVL2 函数
NVL2 (expr1, expr2, expr3): expr1不为NULL,返回expr2;为NULL,返回expr3。
Select last_name, salary, commission_pct,
NVL2(commission_pct,'SAL+COMM', 'SAL') income
From employees
Where department_id IN (50, 80);
CASE 表达式
下面是使用case表达式的一个例子:
Select last_name, job_id, salary,
Casc job_id when'IT_PROG' then 1.10*salary
when 'ST_CLERK' then 1.15*salary
when 'SA_REP' then1.20*salary
else salary end"REVISED_SALARY"
from employees;
嵌套函数
• 单行函数可以嵌套。
• 嵌套函数的执行顺序是由内到外
F3(F2(F1(col,arg1),arg2),arg3)