Oracle系列四 单行函数查询语句
Posted 码上加油站
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle系列四 单行函数查询语句相关的知识,希望对你有一定的参考价值。
单行函数
- 操作数据对象
- 接受参数返回一个结果
- 只对一行进行变换
- 每行返回一个结果
- 可以转换数据类型
- 可以嵌套
- 参数可以是一列或一个值
包含:字符,数值,日期,转换,通用
字符函数
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;
- 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\';
日期
- Oracle 中的日期型数据实际含有两个值: 日期和时间。
SELECT last_name, hire_date FROM employees WHERE last_name LIKE \'G%\';
函数SYSDATE 返回:
日期
时间
日期的数学运算
- 在日期上加上或减去一个数字结果仍为日期。
- 两个日期相减返回日期之间相差的天数。
- 日期不允许做加法运算,无意义
- 可以用数字除24来向日期中加上或减去天数。
示例:
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函数对数字的转换
- TO_CHAR(number, \'format_model\')
TO_CHAR 函数中经常使用的几种格式:
9 |
数字 |
0 | 零 |
$ | 美元符 |
L | 本地货币符号 |
. | 小数点 |
, | 千位符 |
示例
SELECT TO_CHAR(salary,\'$99,999.00\') salary FROM employees WHERE last_name = \'Ernst\';
TO_NUMBER 函数对字符的转换
- 使用 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 函数
- 将空值转换成一个已知的值
- 可以使用的数据类型有日期、字符、数字。
函数的一般形式:
- NVL(commission_pct,0)
- NVL(hire_date,\'01-JAN-97\')
- NVL(job_id,\'No Job Yet\')
示例:
SELECT last_name, salary, nvl(commission_pct,0), ( salary * 12 ) + ( salary * 12 * nvl(commission_pct,0) ) an_sal FROM employees;
使用 NVL2 函数
- NVL2 (expr1, expr2, expr3) : expr1不为NULL,返回expr2;为NULL,返回expr3。
- exp1 != null ? exp2 : exp3
示例:
SELECT last_name, salary, commission_pct, nvl2(commission_pct,\'SAL+COMM\',\'SAL\') income FROM employees WHERE department_id IN ( 50, 80 );
使用 NULLIF 函数
- NULLIF (expr1, expr2) : 相等返回NULL,不等返回expr1
SELECT first_name, length(first_name) "expr1", last_name, length(last_name) "expr2", nullif(length(first_name),length(last_name) ) result FROM employees;
使用 COALESCE 函数
- COALESCE 与 NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值。
- 如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE 。
SELECT last_name, commission_pct, salary, coalesce(commission_pct,salary,1) comm FROM employees ORDER BY commission_pct;
条件表达式
- 在 SQL 语句中使用IF-THEN-ELSE 逻辑
使用两种方法:
- CASE 表达式
- DECODE 函数
CASE 表达式
- 在需要使用 IF-THEN-ELSE 逻辑时:
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 函数
- 在需要使用 IF-THEN-ELSE 逻辑时:
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;
以上是关于Oracle系列四 单行函数查询语句的主要内容,如果未能解决你的问题,请参考以下文章