目标

通过本章学习,您将可以:

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

数字函数

ROUND: 四舍五入

ROUND(45.926, 2)                                             45.93  保留两位小数

TRUNC: 截断

TRUNC(45.926, 2)                                              45.92  保留两位小数

MOD: 求余

MOD(1600, 300)                                                100

日期

l  Oracle 中的日期型数据实际含有两个值: 日期和时间。

l  默认的日期格式是 DD-MON-RR.

函数SYSDATE 返回:

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  可以包含任意的有效的日期格式

日期之间用逗号隔开

日期格式的元素

时间格式

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 函数将字符转换成数字:

TO_NUMBER(char[, 'format_model'])

l  使用 TO_DATE 函数将字符转换成日期:

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)的更多相关文章

  1. oracle 10g 学习之服务器端安装(1)

    Oracle 简介 lOracle 是殷墟出土的甲骨文(oracle bone inscriptions)的英文翻译的第一个单词 lOracle 公司是全球最大的信息管理软件及服务供应商,成立于197 ...

  2. oracle 10g 学习之函数和存储过程(12)

    一.函数 1. 函数的 helloworld: 返回一个 "helloworld--!" 的字符串 create or replace function helloworld re ...

  3. oracle 10g 学习之多表查询、分组函数(6)

    笛卡尔集 l  笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 l  为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. 自连接 select m.las ...

  4. oracle 10g 学习之游标使用和异常介绍(11)

    一.游标 1. 使用游标 要求: 打印出 80 部门的所有的员工的工资: salary: xxx declare --1. 定义游标 cursor salary_cursor is select sa ...

  5. oracle 10g 学习之PL/SQL简介和简单使用(10)

    PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.PL/SQL是 P ...

  6. oracle 10g 学习之视图、序列、索引、同义词(9)

    目标 通过本章学习,您将可以: l  描述视图 l  创建和修改视图的定义,删除视图 l  从视图中查询数据 l  通过视图插入, 修改和删除数据 l  使用“Top-N” 分析 l  创建, 维护, ...

  7. oracle 10g 学习之数据进行增删改查、数据库事务、约束(8)

    目标 通过本章学习,您将可以: l  使用 DML 语句 l  向表中插入数据 l  更新表中数据 l  从表中删除数据 l  控制事务 l  描述约束 l  创建和维护约束 数据控制语言 l     ...

  8. oracle 10g 学习之创建和管理表(7)

    目标 通过本章学习,您将可以: l  描述主要的数据库对象. l  创建表. l  描述各种数据类型. l  修改表的定义. l  删除,重命名和清空表. 常见的数据库对象 表.视图.序列.索引.同义 ...

  9. oracle 10g 学习之oracle管理(3)

    怎样将预先写好的sql脚本执行? select * from employees;→107条记录 利用 Oracle 企业管理器连接数据库服务器 点击打开以下界面: 此时已经连接成功了 用 Oracl ...

随机推荐

  1. javaweb学习总结(三十)——EL函数库

    一.EL函数库介绍 由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用. 这些EL函数在JSTL开发包中进行描述,因此在JSP页 ...

  2. 锋利的jQuery-3--.css()获取和设置元素的数字属性

    $('p').css({"fontSize": "30px", "backgroundColor": "#666"}); ...

  3. css absolute与relative的区别

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 应用PHPCMS V9轻松完成WAP手机网站搭建全教程

    用PHPCMS最新发布的V9搭建了PHPCMS研究中心网站(http://phpcms.org.cn)完成后,有用户提出手机访问的问题,于是着手搭建WAP无线站(wap.phpcms.org.cn). ...

  5. IE7下,input元素相对父级元素错位解决办法

    原因: 当input仅仅包含父元素,父元素拥有margin属性时,IE7的input就会错误的继承margin属性. 解决办法: 给input元素外面套一个span,label这样的内联元素,这样就会 ...

  6. Mongodb c#增删改查

    写在前面 最近项目需要,就研究了下mongodb,也是为了快速上手,就自己弄了一个简单的例子,这里记录一下. Mongodb 传统的关系数据库一般由数据库(database).表(table).记录( ...

  7. 繁华模拟赛 Evensgn的债务

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...

  8. thinkphp中limit方法

    limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多.ThinkPHP的limit方法可以兼容所有的数据库驱动类的. 用法 限制结果数量 例如获取满足 ...

  9. cocos进阶教程(2)多分辨率支持策略和原理

    cocos2d-x3.0API常用接口 Director::getInstance()->getOpenGLView()->setDesignResolutionSize() //设计分辨 ...

  10. DNS原理及其解析过程【精彩剖析】(转)

      2012-03-21 17:23:10 标签:dig wireshark bind nslookup dns 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否 ...