talkingDB 2019-11-03
单行函数
包含:字符,数值,日期,转换,通用
字符函数
1.大小写控制函数:这类函数改变字符的大小写。
LOWER(‘SQL Course‘) sql course UPPER(‘SQL Course‘) SQL COURSE INITCAP(‘SQL Course‘) Sql Course
示例:
SELECT
employee_id,
last_name,
department_id
FROM
employees
WHERE
lower(last_name) = ‘higgins‘;
2.字符控制函数
CONCAT(‘Hello‘, ‘World‘) HelloWorld SUBSTR(‘HelloWorld‘,1,5) Hello LENGTH(‘HelloWorld‘) 10 INSTR(‘HelloWorld‘, ‘W‘) 6 LPAD(salary,10,‘*‘) *****24000 //第一个参数是需要处理的字符串,第二个参数是需要将字符串扩充的宽度,第三个参数表示加宽部分用什么字符来做填补,第三个参数的默认值为空格,但也可以是单个的字符或字符串 RPAD(salary, 10, ‘*‘) 24000***** //同上 TRIM(‘H‘ FROM ‘HelloWorld‘) elloWorld REPLACE(‘abcd’,’b’,’m’) amcd
示例:
SELECT
employee_id,
concat(first_name,last_name) name,
job_id,
length(last_name),
instr(last_name,‘a‘) "Contains ‘a‘?"
FROM
employees
WHERE
substr(job_id,4) = ‘REP‘;
数字函数
ROUND: 四舍五入
ROUND(45.926, 2) 45.93
TRUNC: 截断
TRUNC(45.926, 2) 45.92
MOD: 求余
MOD(1600, 300) 100
SELECT
round(45.923,2),
round(45.923,0),
round(45.923,-1)
FROM
dual;示例:
SELECT
trunc(45.923,2),
trunc(45.923),
trunc(45.923,-2)
FROM
dual;
示例:
SELECT
last_name,
salary,
mod(salary,5000)
FROM
employees
WHERE
job_id = ‘SA_REP‘;
日期
SELECT
last_name,
hire_date
FROM
employees
WHERE
last_name LIKE ‘G%‘;
函数SYSDATE 返回:
日期
时间
日期的数学运算
示例:
SELECT
last_name,
( SYSDATE - hire_date ) / 7 AS weeks
FROM
employees
WHERE
department_id = 90;日期函数
| 函数 | 描述 |
| ONTHS_BETWEEN | 两个日期相差的月数 |
| ADD_MONTHS | 向指定日期中加上若干月数 |
| NEXT_DAY | 指定日期的下一个星期 * 对应的日期 |
| LAST_DAY | 本月的最后一天 |
| ROUND | 日期四舍五入 |
| TRUNC | 日期截断 |
MONTHS_BETWEEN (‘01-SEP-95‘,‘11-JAN-94‘) -》19.6774194 ADD_MONTHS (‘11-JAN-94‘,6) -》‘11-JUL-94‘ NEXT_DAY (‘01-SEP-95‘,‘FRIDAY‘) -》‘08-SEP-95‘ LAST_DAY(‘01-FEB-95‘) -》‘28-FEB-95‘
转换函数:隐 性 和显性
隐式数据类型转换:
Oracle 自动完成下列转换:
| 源数据类型 | 目标数据类型 |
| VARCHAR2 or CHAR | NUMBER |
| VARCHAR2 or CHAR | DATE |
| NUMBER | VARCHAR2 |
| DATE | VARCHAR2 |
data<--> VARCHAR2<--> number
显式数据类型转换 :

TO_CHAR函数对日期的转换
TO_CHAR(date, ‘format_model‘)
格式:
示例:
SELECT
TO_CHAR(SYSDATE,‘yyyy-mm-dd hh:mi:ss‘)
FROM
dual;
日期格式的元素
| YYYY | 2004 |
| YEAR | TWO THOUSAND AND FOUR |
| MM | 02 |
| MONTH | JULY |
| MON | JUL |
| DY | MON |
| DAY | MONDAY |
| DD | 02 |
日期格式的元素
HH24:MI:SS AM 15:45:32 PM
使用双引号向日期中添加字符
DD "of" MONTH 12 of OCTOBER
TO_CHAR 函数对日期的转换
SELECT
last_name,
TO_CHAR(hire_date,‘DD Month YYYY‘) AS hiredate
FROM
employees;
示例
SELECT
employee_id,
last_name,
hire_date
FROM
employees
WHERE
TO_CHAR(hire_date,‘yyyy-mm-dd‘) = ‘1987-09-17‘;
TO_DATE 函数对字符的转换
使用 TO_DATE :
TO_DATE(char[, ‘format_model‘])
使用 TO_DATE 函数将字符转换成数字:
TO_DATE(‘2012年10月29日 08:10:21’,’yyyy“年”mm”月”dd“日”hh:mi:ss’) From dual
TO_CHAR 函数中经常使用的几种格式:
9 | 数字 |
| 0 | 零 |
| $ | 美元符 |
| L | 本地货币符号 |
| . | 小数点 |
| , | 千位符 |
示例
SELECT
TO_CHAR(salary,‘$99,999.00‘) salary
FROM
employees
WHERE
last_name = ‘Ernst‘;
TO_NUMBER 函数对字符的转换
TO_NUMBER(char[, ‘format_model‘])
使用 TO_NUMBER :
TO_NUMBER(‘¥1,234,567,890.00’,’L999,999,999,999.99’) from dual
通用函数
这些函数适用于任何数据类型,同时也适用于空值:
NVL (expr1, expr2) NVL2 (expr1, expr2, expr3) NULLIF (expr1, expr2) COALESCE (expr1, expr2, ..., exprn)
NVL 函数
函数的一般形式:
示例:
SELECT
last_name,
salary,
nvl(commission_pct,0),
( salary * 12 ) + ( salary * 12 * nvl(commission_pct,0) ) an_sal
FROM
employees;
使用 NVL2 函数
示例:
SELECT
last_name,
salary,
commission_pct,
nvl2(commission_pct,‘SAL+COMM‘,‘SAL‘) income
FROM
employees
WHERE
department_id IN (
50,
80
);
使用 NULLIF 函数
SELECT
first_name,
length(first_name) "expr1",
last_name,
length(last_name) "expr2",
nullif(length(first_name),length(last_name) ) result
FROM
employees;
使用 COALESCE 函数
SELECT
last_name,
commission_pct,
salary,
coalesce(commission_pct,salary,1) comm
FROM
employees
ORDER BY
commission_pct;
条件表达式
使用两种方法:
CASE 表达式
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
示例:
SELECT
last_name,
job_id,
salary,
CASE job_id
WHEN ‘IT_PROG‘ THEN 1.10 * salary
WHEN ‘ST_CLERK‘ THEN 1.15 * salary
WHEN ‘SA_REP‘ THEN 1.20 * salary
ELSE salary
END
"REVISED_SALARY"
FROM
employees;
DECODE 函数
DECODE(col|expression, search1, result1 ,
[, search2, result2,...,]
[, default])示例
SELECT
last_name,
job_id,
salary,
DECODE(job_id,‘IT_PROG‘,1.10 * salary,‘ST_CLERK‘,1.15 * salary,‘SA_REP‘,1.20 * salary,salary) AS revised_salary
FROM
employees;
示例:
SELECT
last_name,
salary,
DECODE(trunc(salary / 2000,0),0,0.00,1,0.09,2,0.20,3,0.30,4,0.40,5,0.42,6,0.44,0.45) tax_rate
FROM
employees
WHERE
department_id = 80;
嵌套函数

示例
SELECT
last_name,
nvl(TO_CHAR(manager_id),‘No Manager‘)
FROM
employees
WHERE
manager_id IS NULL;