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系列四 单行函数查询语句的更多相关文章
- Oracle数据库之六 单行函数
六.单行函数 6.1.认识单行函数 函数就是和 Java 语言之中的方法的功能是一样的,都是为了完成某些特定操作的功能支持,而在 Oracle 数据库里面也包含了大量的单行函数,这些函数掌握了以后 ...
- Oracle中的单行函数
Oracle中的单行函数 1 字符函数 UPPER()--将字符串转换为大写 SELECT UPPER('abc') FROM dual; LOWER()-将字符串转换为小写 SELECT LOWER ...
- .Net程序员学用Oracle系列(14):子查询、集合查询
1.子查询 1.1.子查询简介 1.2.WITH 子查询 2.集合查询 2.1.UNION 和 UNION ALL 2.2.MINUS 2.3.INTERSECT 2.4.集合运算与 ORDER BY ...
- Oracle SQL:select各类查询语句总结
SQL查询语句总结 数据查询语言:即DML(Data Mannipulation Language)数据操纵语言,用于查询.操纵数据表资料行 本手册所有示例引用表均以TIPTOP GP ERP数据库 ...
- .Net程序员学用Oracle系列(20):层次查询(CONNECT BY)
1.层次查询语句 1.1.CONNECT BY 语法 1.2.CONNECT BY 示例 2.层次查询函数 2.1.SYS_CONNECT_BY_PATH 2.2.WMSYS.WM_CONCAT 2. ...
- .Net程序员学用Oracle系列(21):分组查询(GROUP BY)
1.GROUP BY 标准分组 1.1.GROUP BY 概述 1.2.WHERE 和 HAVING 的区别? 2.GROUP BY 扩展分组 2.1.ROLLUP 分组 2.2.CUBE 分组 2. ...
- SQL Server调优系列进阶篇(查询语句运行几个指标值监测)
前言 上一篇我们分析了查询优化器的工作方式,其中包括:查询优化器的详细运行步骤.筛选条件分析.索引项优化等信息. 本篇我们分析在我们运行的过程中几个关键指标值的检测. 通过这些指标值来分析语句的运行问 ...
- oracle篇 之 单行函数
一.分类 1.单行函数:需要处理的行数和返回结果的行数相等(单行进单行出) 2.多行函数(组函数):返回结果的行数少于要处理的行数(多行进单行出) 二.字符处理相关函数 1.lower:字符串转换成小 ...
- Oracle Single-Row Functions(单行函数)——NULL-Related Functions
参考资料:http://docs.oracle.com/database/122/SQLRF/Functions.htm#SQLRF006 Single-row functions return a ...
随机推荐
- Java入门(二)——泛型
如果你写过前端,可能会经常写一下关于变量类型的判断,比如:typeof fn === 'function'之类的代码.因为JavaScript作为一门弱类型语言,类型的判断往往需要开发人员自己去检查. ...
- Cloudera Certified Associate Administrator案例之Configure篇
Cloudera Certified Associate Administrator案例之Configure篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.下载CDH集群中最 ...
- MSSQL-反弹注入
工具:香港云免费云服务器:http://www.webweb.com 注册使用匿名邮箱:https://bccto.me/ 香港云服务器搭建MSSQL数据库,并建表admin,字段数要大于等于我们想要 ...
- Android Binder机制彻底梳理一
Binder架构图: 先来瞅一下它的整体架构图: 其中粉红部分是上层的Binder,而蓝色的则是下层的Binder,很显然上层的是依赖于下层的. 什么是Binder[有个大概了解]? 这里从几个层面来 ...
- BZOJ1499: 瑰丽华尔兹(单调队列)
pro: 给出一个n*m的地图,刚开始人在(x,y),每次给出一段区间(l,r,t),表示在时间[l,r]内,可以使人向4个方向(t)移动一格,或者不动.求最大可以移动多少格. sol: 考虑每一列( ...
- Linux——自定义服务命令
前言 这个写部署禅道的时候包含了这个内容,但是今天弄的时候突然忘记了,所以还是重新写下. 步骤 有的同学可能会不知道一些系统自带的目录是什么意思,所以我这里就拆分下,不直接创建 进入到系统服务目录 c ...
- Generator 函数和for...of循环,实现斐波那契数列
function* fib () { let [prev, cur] = [0,1] for (;;) { yield cur [prev, cur] = [cur, cur+prev] } } fo ...
- python - 手机号正则匹配
Python 手机号正则匹配 # -*- coding:utf-8 -*- import re def is_phone(phone): phone_pat = re.compile('^(13\d| ...
- Python2.7 报错:UnicodeEncodeError: 'ascii' codec can't encode characters in position 3-4: ordinal not in range(128)
一. 错误原因(网上找的是这样说的,具体的我也不是很了解2.7版本的编码问题): 1.python默认使用ASCII处理字符流. 2.Unicode编码与ASCII编码的不兼容,Python脚本文件是 ...
- [CSS] prefers-reduced-motion
The prefers-reduced-motion CSS media feature is used to detect if the user has requested that the sy ...