oracle 10g 学习之单行函数(5)
目标
通过本章学习,您将可以:
l SQL中不同类型的函数。
l 在 SELECT 语句中使用字符,数字和日期函数。
l 描述转换型函数的用途。
字符函数
字符函数分为大小写控制函数和字符控制函数
(1) 大小写控制函数
LOWER将字符串转换为小写
UPPER 将字符串转换为大写
INITCAP 将字符串第一个首字母大写
select LOWER('ABC'),UPPER('abc'),INITCAP('abc') from dual;
DUAL 是一个‘伪表’,可以用来测试函数和表达式,结果为:
LOWER('ABC') UPPER('ABC') INITCAP('ABC')
------------ ------------ --------------
abc ABC Abc
比如我们查询员工表可以这样使用:
SELECT employee_id, last_name, department_id
FROM employees
WHERE LOWER(last_name) = 'higgins';
(2) 字符控制函数
CONCAT将两个字符串连接
select CONCAT('Hello', 'World') FROM DUAL;
CONCAT('HELLO','WORLD')
-----------------------
HelloWorld
SUBSTR截取字符串,从1开始
select SUBSTR('HelloWorld',1,5) FROM DUAL;
SUBSTR('HELLOWORLD',1,5)
------------------------
Hello
LENGTH字符串的长度
select LENGTH('HelloWorld') FROM DUAL;
LENGTH('HELLOWORLD')
--------------------
10
INSTR找到某个字符在字符串中第一次出现的位置
select INSTR('HelloWorld', 'W') FROM DUAL;
INSTR('HELLOWORLD','W')
-----------------------
6
LPAD判断字符串是否有指定的字符串的长度,没有则从左边开始以指定的字符填充
select LPAD('abc',10,'*') FROM DUAL;
LPAD('ABC',10,'*')
------------------
*******abc
RPAD和LPAD基本一样,只不过是从右边填充
TRIM去除指定字符串的前后的指定字符,字符串区分大小写
select TRIM('a' FROM 'abcda') FROM DUAL;
TRIM('A'FROM'ABCDA')
--------------------
bcd
REPLACE替换字符串
select replace('abcd', 'b', 'm') FROM DUAL;
REPLACE('ABCD','B','M')
-----------------------
amcd
数字函数
l ROUND: 四舍五入
ROUND(45.926, 2) 45.93 保留两位小数
l TRUNC: 截断
TRUNC(45.926, 2) 45.92 保留两位小数
l MOD: 求余
MOD(1600, 300) 100
日期
l Oracle 中的日期型数据实际含有两个值: 日期和时间。
l 默认的日期格式是 DD-MON-RR.
函数SYSDATE 返回:
l 日期
l 时间
日期的数学运算
l 在日期上加上或减去一个数字结果仍为日期。
l 两个日期相减返回日期之间相差的天数。
l 可以用数字除24来向日期中加上或减去小时。
日期函数
MONTHS_BETWEEN两个日期相差的月数
select months_between(to_date('1999.11.29','yyyy.mm.dd'), to_date('1998.11.29','yyyy.mm.dd')) from dual;
MONTHS_BETWEEN(TO_DATE('1999.1
------------------------------
12
ADD_MONTHS向指定日期中加上若干月数
select add_months(to_date('1999.11.29','yyyy.mm.dd'),1) from dual
ADD_MONTHS(TO_DATE('1999.11.29
------------------------------
1999-12-29
NEXT_DAY 指定日期的下一个日期
select next_day(to_date('2013.11.30','yyyy.mm.dd'),'星期五') from dual
2013.11.30下个星期五就是NEXT_DAY(TO_DATE('2013.11.30',
------------------------------
2013-12-6
LAST_DAY 本月的最后一天
select last_day(to_date('2013.11.22','yyyy.mm.dd')) from dual
LAST_DAY(TO_DATE('2013.11.22',
------------------------------
2013-11-30
ROUND 日期四舍五入
Assume SYSDATE = '25-JUL-95':
- ROUND(SYSDATE,'MONTH') 01-AUG-95
- ROUND(SYSDATE ,'YEAR') 01-JAN-96
- TRUNC(SYSDATE ,'MONTH') 01-JUL-95
TRUNC 日期截断
- TRUNC(SYSDATE ,'YEAR') 01-JAN-95
转换函数
隐式数据类型转换
Oracle 自动完成下列转换:
VARCHAR2 or CHAR → NUMBER
VARCHAR2 or CHAR → DATE
NUMBER → VARCHAR2
DATE → VARCHAR2
TO_CHAR 函数对日期的转换
TO_CHAR(date, 'format_model')
格式:
l 必须包含在单引号中而且大小写敏感。
l 可以包含任意的有效的日期格式。
l 日期之间用逗号隔开。
日期格式的元素
时间格式
HH24:MI:SS AM 15:45:32 PM
使用双引号向日期中添加字符
DD "of" MONTH 12 of OCTOBER
TO_CHAR 函数对数字的转换
TO_CHAR(number, 'format_model')
下面是在TO_CHAR 函数中经常使用的几种格式:
SELECT TO_CHAR('33333.33', '$99,999.99') from dual;
TO_CHAR('33333.33','$99,999.99
------------------------------
$33,333.33
TO_NUMBER 和 TO_DATE 函数
l 使用 TO_NUMBER 函数将字符转换成数字:
l TO_NUMBER(char[, 'format_model'])
l 使用 TO_DATE 函数将字符转换成日期:
l TO_DATE(char[, 'format_model'])
通用函数
这些函数适用于任何数据类型,同时也适用于空值:
l NVL (expr1, expr2)
l NVL2 (expr1, expr2, expr3)
l NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)
NVL 函数
将空值转换成一个已知的值:
l 可以使用的数据类型有日期、字符、数字。
l 函数的一般形式:
- 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。
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
使用 COALESCE 函数
l COALESCE 与 NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值。
l 如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE 。
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
DECODE 函数和CASE表达式一样,语法不同
在需要使用 IF-THEN-ELSE 逻辑时:
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)
REVISED_SALARY
FROM employees;
oracle 10g 学习之单行函数(5)的更多相关文章
- oracle 10g 学习之服务器端安装(1)
Oracle 简介 lOracle 是殷墟出土的甲骨文(oracle bone inscriptions)的英文翻译的第一个单词 lOracle 公司是全球最大的信息管理软件及服务供应商,成立于197 ...
- oracle 10g 学习之函数和存储过程(12)
一.函数 1. 函数的 helloworld: 返回一个 "helloworld--!" 的字符串 create or replace function helloworld re ...
- oracle 10g 学习之多表查询、分组函数(6)
笛卡尔集 l 笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 l 为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. 自连接 select m.las ...
- oracle 10g 学习之游标使用和异常介绍(11)
一.游标 1. 使用游标 要求: 打印出 80 部门的所有的员工的工资: salary: xxx declare --1. 定义游标 cursor salary_cursor is select sa ...
- oracle 10g 学习之PL/SQL简介和简单使用(10)
PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.PL/SQL是 P ...
- oracle 10g 学习之视图、序列、索引、同义词(9)
目标 通过本章学习,您将可以: l 描述视图 l 创建和修改视图的定义,删除视图 l 从视图中查询数据 l 通过视图插入, 修改和删除数据 l 使用“Top-N” 分析 l 创建, 维护, ...
- oracle 10g 学习之数据进行增删改查、数据库事务、约束(8)
目标 通过本章学习,您将可以: l 使用 DML 语句 l 向表中插入数据 l 更新表中数据 l 从表中删除数据 l 控制事务 l 描述约束 l 创建和维护约束 数据控制语言 l ...
- oracle 10g 学习之创建和管理表(7)
目标 通过本章学习,您将可以: l 描述主要的数据库对象. l 创建表. l 描述各种数据类型. l 修改表的定义. l 删除,重命名和清空表. 常见的数据库对象 表.视图.序列.索引.同义 ...
- oracle 10g 学习之oracle管理(3)
怎样将预先写好的sql脚本执行? select * from employees;→107条记录 利用 Oracle 企业管理器连接数据库服务器 点击打开以下界面: 此时已经连接成功了 用 Oracl ...
随机推荐
- 浅谈PHP与手机APP开发(API接口开发)
了解PHP与API开发 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:服务端的开发.(别去纠结 GTK ...
- 统计网站访问量,以GD2库图像形式输出
index.php页面<?php session_start(); if($_SESSION[temp]==""){ //判断$_SESSION[temp]=="& ...
- Sphinx学习之sphinx的安装篇
一. Sphinx简介 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.Sphinx可以非常容易的与 ...
- 各种工具使用手册:http://www.itshouce.com.cn/linux/linux-tcpdump.html 关于tcpdump!!!!
各种工具使用手册:http://www.itshouce.com.cn/linux/linux-tcpdump.html 关于tcpdump!!!! 实用tcpdump命令 //查看本机与mysql的 ...
- http 超文本传输协议
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接 ...
- jQuery类库的设计
目前为止,jquery是js社区中最活跃.用户最多的前端类库,具有链式操作.兼容性.基于数组的操作.强大的插件机制等特点,也是很多前端入门同学最早接触到的库.但是内部如何实现的,一直吸引着我.因此最近 ...
- 在iphone上安装多个微信 【微信营销必备】
做微信营销有很多因素会影响,xmyanke认为微信消息的活跃度会让你的微信公众号在微信搜索排名靠前,既然那样,我们可以通过运营几个小号来达到目的.每每当你在几个微信小号之间切换的时候有没要奔溃的赶脚? ...
- Spring常用的接口和类(一)
一.ApplicationContextAware接口 当一个类需要获取ApplicationContext实例时,可以让该类实现ApplicationContextAware接口.代码展示如下: p ...
- 微信公众平台开发(十) 消息回复总结——用其xml模板
一.简介 微信公众平台提供了三种消息回复的格式,即文本回复.音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用. 二.思路分析 对于每一个PO ...
- c++ builder xe2 (Embarcadero rad studio) 远程调试 同样适用于 delphi 远程调试 教程
转载:http://www.cnblogs.com/zhangdongsheng/p/3411056.html 每次要远程调试的时候都要看半天的xe2英文帮助文档,今天正好有点时间,把它写下来. 一. ...