一、什么是函数

任何东西,只要它能接收输入,对输入进行加工并产生输出,它就可以被称为函数。

二、单行函数简介

单行函数只对表中的一行数据进行操作,并且对每一行数据只产生一个输出结果。单行函数可以接受一个或多个参数,其产生的输出结果的数据类型可能与参数的数据类型不同。

单行函数包含:

1.字符型

2.数字型

3.日期型

4.转换型

5.一般型函数

三、单行字符型函数

常用的字符型函数包括:

LOWER、UPPER、INITCAP、CONCAT、SUBSTR、LENGTH、INSTR、TRIM、REPLACE

1.LOWER(列名|表达式):该函数是把字符转换成小写。

SQL> select LOWER('SQL: Structural Query Language')
2 from dual; LOWER('SQL:STRUCTURALQUERYLANG
------------------------------
sql: structural query language

2.UPPER(列名|表达式):该函数是把字符转换成大写。

SQL> select upper ('sql is used exclusively in rdbmses')
2 from dual; UPPER('SQLISUSEDEXCLUSIVELYINRDBMS
----------------------------------
SQL IS USED EXCLUSIVELY IN RDBMSES

3.INITCAP(列名|表达式):该函数是把每个字的头一个字符转换成大写,其余的转换成小写。

SQL> select INITCAP('SQL is an ENGLISH LIKE language')
2 from dual; INITCAP('SQLISANENGLISHLIKELANG
-------------------------------
Sql Is An English Like Language

4.CONCAT(列名|表达式,列名|表达式):该函数是把头一个字符串和第二个字符串连接成一个字符串。

SQL> select CONCAT('SQL allows you to manipulate the data in DB',
2 ' without any programming knowlege')
3 from dual; CONCAT('SQLALLOWSYOUTOMANIPULATETHEDATAINDB','WITHOUTANYPROGRAMMINGKNOWLEGE'
----------------------------------------------------------------------------
SQL allows you to manipulate the data in DB without any programming knowlege

5.SUBSTR(列名|表达式,m,[n]):该函数是返回指定的字符串。该字符串是从第m个字符开始,其长度为n。

SQL> select SUBSTR('SQL lets you concentrate on what has to be done',14)
2 from dual; SUBSTR('SQLLETSYOUCONCENTRATEONWHA
----------------------------------
concentrate on what has to be done

在这个例子中我们省略了n,其结果是返回从第14个字符开始一直到结尾的所有字符。
    6.LENGTH(列名|表达式):该函数是返回列中或表达式中字符串的长度。

SQL> select LENGTH('SQL does not let you concentrate on how it will be achieved')
2 from dual; LENGTH('SQLDOESNOTLETYOUCONCENTRATEONHOWITWILLBEACHIEVED')
----------------------------------------------------------
59

7.INSTR(列名|表达式,'字符串',[m],[n]):该函数是返回所给字符串的数字位置,m表示从第m个字符开始搜索,n表示所给字符串出现的次数,它们的默认值都为1。

SQL> select INSTR('SQL allows for dynamic DB changes','F')
2 from dual; INSTR('SQLALLOWSFORDYNAMICDBCHANGES','F')
-----------------------------------------
0 SQL> select INSTR('SQL allows for dynamic DB changes','f')
2 from dual; INSTR('SQLALLOWSFORDYNAMICDBCHANGES','F')
-----------------------------------------
12

8.TRIM([leading|trailing|both]要去掉的字符FROM源字符串):该函数能够从“源字符串”中的头(leading)部,或尾(trailing)部,或从头(leading)部和尾(trailing)部(both)中去掉“要去掉的字符”。

如果没有指定头(leading)或尾(trailing),TRIM函数按默认(both)处理(该函数是8i刚刚引入的,在8i之前的版本中是两个函数LTRIM和RTRIM)。

SQL> select TRIM('?' FROM '?SQL*PLUS is the SQL implementation
2 used in an Oracle RDBMS or ORDBMS.')
3 from dual; TRIM('?'FROM'?SQL*PLUSISTHESQLIMPLEMENTATIONUSEDINANORACLERDBMSORORDBMS.')
--------------------------------------------------------------------------------
SQL*PLUS is the SQL implementation
used in an Oracle RDBMS or ORDBMS.

也可以通过下面的查询语句来去掉rows之后的两个问号。

SQL> select TRIM('?' FROM ' It can process data in sets of rows??')
2 from dual; TRIM('?'FROM'ITCANPROCESSDATAINSETSO
------------------------------------
It can process data in sets of rows

以上两个例子都没有指出是去掉头部的还是尾部的字符,因此Oracle按默认Both来处理。第一个例子只在头部有“?”而第二个例子只在尾部有“?”,所以Oracle系统可以正确的处理。
   下面的例子,TRIM函数的这种用法就要遇到麻烦了。

SQL> select TRIM('s' FROM 'sql*plus is a fourth generation query languages')
2 from dual; TRIM('S'FROM'SQL*PLUSISAFOURTHGENERATIONQUERY
---------------------------------------------
ql*plus is a fourth generation query language

在上面的SQL语句中,我们是想去掉尾部的“s”,但Oracle系统把开头的和结尾的“s”都去掉了。这显然不是我们所希望的结果。这时我们可以用trailing选项来解决这个问题。

SQL> select TRIM(trailing 's' FROM 'sql*plus is a fourth generation query languages')
2 from dual; TRIM(TRAILING'S'FROM'SQL*PLUSISAFOURTHGENERATI
----------------------------------------------
sql*plus is a fourth generation query language

在这里就不演示直接使用Leading选项的例子。
    9.REPLACE(正文表达式,要搜寻的字符串,替换字符串):该函数是在"正文表达式"中查找"要搜寻的字符串",如果找到了就用"替换字符串"替代。

SQL> select REPLACE('SQL*PLUS supports loops or if statements','supports',
2 'does not support')
3 from dual; REPLACE('SQL*PLUSSUPPORTSLOOPSORIFSTATEMENTS','S
------------------------------------------------
SQL*PLUS does not support loops or if statements

四、数字型函数
    常用的数字型函数包括:

ROUND、TRUNC、MOD

1.ROUND(列名|表达式,n):

该函数将列名或表达式所表示的数值四舍五入到小数点后的n位。

2.TRUNC(列名|表达式,n):

该函数将列名或表达式所表示的数值截取到小数点后的n位。

3.MOD(m,n):

该函数将m除以n并取余数。

SQL> select ROUND(168.888,1),TRUNC(168.888,1)
2 from dual; ROUND(168.888,1) TRUNC(168.888,1)
---------------- ----------------
168.9 168.8 SQL> select MOD(300,400)
2 from dual; MOD(300,400)
------------
300

五、日期函数
    首先演示一下查询数据库的时间例子:

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2013-07-07 09:44:36

常用的日期型函数包括:
    MONTHS_BETWEEN、ADD_MONTHS、NEXT_DAY、LAST_DAY

1.MONTHS_BETWEEN(日期1,日期2):

该函数是返回日期1和日期2之间的月数。如果日期1大于日期2,其返回的月数为正。如果日期1小于日期2,其返回的月数为负。

2.ADD_MONTHS(日期,n):

该函数是把n个月加到日期上。

3.NEXT_DAY(日期,字符串):

该函数是返回下一个由字符串(星期几)指定的日期。

4.LAST_DAY(日期):

该函数是返回该日期所在月的最后一天。

一个综合的例子:

SQL> select ename,hiredate,LAST_DAY(hiredate),NEXT_DAY(hiredate,'SUNDAY'),
2 MONTHS_BETWEEN(SYSDATE,hiredate) "Months",
3 ADD_MONTHS(hiredate,3) "Revies"
4 from emp; ENAME HIREDATE LAST_DAY( NEXT_DAY( Months Revies
---------- --------- --------- --------- ---------- ---------
SMITH 17-DEC-80 31-DEC-80 21-DEC-80 390.690779 17-MAR-81
ALLEN 20-FEB-81 28-FEB-81 22-FEB-81 388.594005 20-MAY-81
WARD 22-FEB-81 28-FEB-81 01-MAR-81 388.529489 22-MAY-81
JONES 02-APR-81 30-APR-81 05-APR-81 387.17465 02-JUL-81
MARTIN 28-SEP-81 30-SEP-81 04-OCT-81 381.33594 28-DEC-81
BLAKE 01-MAY-81 31-MAY-81 03-MAY-81 386.206908 01-AUG-81
CLARK 09-JUN-81 30-JUN-81 14-JUN-81 384.948844 09-SEP-81
SCOTT 19-APR-87 30-APR-87 26-APR-87 314.626263 19-JUL-87
KING 17-NOV-81 30-NOV-81 22-NOV-81 379.690779 17-FEB-82
TURNER 08-SEP-81 30-SEP-81 13-SEP-81 381.981102 08-DEC-81
ADAMS 23-MAY-87 31-MAY-87 24-MAY-87 313.497231 23-AUG-87
JAMES 03-DEC-81 31-DEC-81 06-DEC-81 379.142392 03-MAR-82
FORD 03-DEC-81 31-DEC-81 06-DEC-81 379.142392 03-MAR-82
MILLER 23-JAN-82 31-JAN-82 24-JAN-82 377.497231 23-APR-82 14 rows selected.

六、ROUND和TRUNC函数用于日期型数据
    除了可以把ROUND和TRUNC函数用于数字型数据外,还可以把ROUND和TRUNC函数用于日期型数据。

SQL> select ROUND(TO_DATE('25-JUL-13'),'MONTH')
2 from dual; ROUND(TO_
---------
01-AUG-13 SQL> select TRUNC(TO_DATE('25-JUL-13'),'MONTH')
2 from dual; TRUNC(TO_
---------
01-JUL-13 SQL> select ename,hiredate,ROUND(hiredate,'YEAR'),TRUNC(hiredate,'YEAR'),
2 ROUND(hiredate,'MONTH'),TRUNC(hiredate,'MONTH')
3 from emp
4 where hiredate like '%81'; ENAME HIREDATE ROUND(HIR TRUNC(HIR ROUND(HIR TRUNC(HIR
---------- --------- --------- --------- --------- ---------
ALLEN 20-FEB-81 01-JAN-81 01-JAN-81 01-MAR-81 01-FEB-81
WARD 22-FEB-81 01-JAN-81 01-JAN-81 01-MAR-81 01-FEB-81
JONES 02-APR-81 01-JAN-81 01-JAN-81 01-APR-81 01-APR-81
MARTIN 28-SEP-81 01-JAN-82 01-JAN-81 01-OCT-81 01-SEP-81
BLAKE 01-MAY-81 01-JAN-81 01-JAN-81 01-MAY-81 01-MAY-81
CLARK 09-JUN-81 01-JAN-81 01-JAN-81 01-JUN-81 01-JUN-81
KING 17-NOV-81 01-JAN-82 01-JAN-81 01-DEC-81 01-NOV-81
TURNER 08-SEP-81 01-JAN-82 01-JAN-81 01-SEP-81 01-SEP-81
JAMES 03-DEC-81 01-JAN-82 01-JAN-81 01-DEC-81 01-DEC-81
FORD 03-DEC-81 01-JAN-82 01-JAN-81 01-DEC-81 01-DEC-81 10 rows selected.

七、不同数据类型之间的隐含转换
    赋值语句中数据类型之间的隐含转换(Oracle自动转换):

1.将变长字符型(VARCHAR2)或定长字符型(CHAR)转换成数字型(NUMBER);

2.将变长字符型(VARCHAR2)或定长字符型(CHAR)转换成日期型(DATE);

3.将数字型(NUMBER)转换成变长字符型(VARCHAR2);

4.将日期型(DATE)转换成变长字符型(VARCHAR2)。

八、不同数据类型之间的显式转换

Oracle提供了3个转换函数来完成不同数据类型之间的显式转换。

TO_CHAR、TO_NUMBER、TO_DATE

1.TO_CHAR(日期,‘fmt'):

该函数的这种格式把日期型数据转换成变长字符串,其中,fmt为日期模式。

SQL> select ename,to_char(hiredate,'DD/MM/YY')
2 from emp
3 where hiredate like '%82'; ENAME TO_CHAR(
---------- --------
MILLER 23/01/82

常用的日期模式:
    a.YYYY:完整的年份数字表示(如2001);

b.YEAR:年份的英文表示(如NINETEEN EIGHTY-SEVEN);

c.MM:用两位数字来表示月份;

d.MONTH:月份完整的英文表示;

e.DY:用3个英文字符的缩写来表示星期几;

f.DAY:星期几的完整的英文表示;

g.DD:几号的数字表示。

查询员工的名字(Name),工资(Salary)和雇佣日期(HIREDATE)的信息。

SQL> select ename "Name",sal "Salary",
2 to_char(hiredate,'fmDdspth "of" Month Year fmHH:MI:SS AM') HIREDATE
3 from emp; Name Salary HIREDATE
---------- ---------- ----------------------------------------------------------------------------------------------------
SMITH 800 Seventeenth of December Nineteen Eighty 12:00:00 AM
ALLEN 1600 Twentieth of February Nineteen Eighty-One 12:00:00 AM
WARD 1250 Twenty-Second of February Nineteen Eighty-One 12:00:00 AM
JONES 2975 Second of April Nineteen Eighty-One 12:00:00 AM
MARTIN 1250 Twenty-Eighth of September Nineteen Eighty-One 12:00:00 AM
BLAKE 2850 First of May Nineteen Eighty-One 12:00:00 AM
CLARK 2450 Ninth of June Nineteen Eighty-One 12:00:00 AM
SCOTT 3000 Nineteenth of April Nineteen Eighty-Seven 12:00:00 AM
KING 5000 Seventeenth of November Nineteen Eighty-One 12:00:00 AM
TURNER 1500 Eighth of September Nineteen Eighty-One 12:00:00 AM
ADAMS 1100 Twenty-Third of May Nineteen Eighty-Seven 12:00:00 AM
JAMES 950 Third of December Nineteen Eighty-One 12:00:00 AM
FORD 3000 Third of December Nineteen Eighty-One 12:00:00 AM
MILLER 1300 Twenty-Third of January Nineteen Eighty-Two 12:00:00 AM 14 rows selected.

2.TO_CHAR(数字,‘fmt'):
    该函数的这种格式把数字型数据转换成变长字符串。

其中,fmt为数字模式。常用的数字模式包括:

9:位数字;

0:显示前导零;

$:显示美元号;

L:显示本地货币号;

.:显示小数点;

,:显示千位符;

MI:在数的右边显示减号;

PR:把负数用尖括号扩起来。

下面的查询语句用来显示员工的名字(Name)和年薪(Annual Salary),其中显示年薪时要包括美元($)符、千位符(,)和小数点(.),而且要显示小数点后两位数,即使小数点后的数为0也要显示。

SQL> select ename "Name",TO_CHAR(sal*12,'$99,999.00') "Annual Salary"
2 from emp; Name Annual Sala
---------- -----------
SMITH $9,600.00
ALLEN $19,200.00
WARD $15,000.00
JONES $35,700.00
MARTIN $15,000.00
BLAKE $34,200.00
CLARK $29,400.00
SCOTT $36,000.00
KING $60,000.00
TURNER $18,000.00
ADAMS $13,200.00
JAMES $11,400.00
FORD $36,000.00
MILLER $15,600.00 14 rows selected.

3.TO_NUMBER(字符串 [,'fmt]‘):
    该函数把字符串转换成数字。

4.TO_DATE(字符串 [,'fmt]’):

该函数把字符串转换成日期型数据。

Oracle 单行函数的更多相关文章

  1. Oracle单行函数笔记

    Oracle中单行函数的分类:1.字符函数substr():字符串截取select substr('我爱你,你知道么?',0,4) from dual执行结果:我爱你,length函数:字符串长度se ...

  2. Oracle单行函数

    一.尽管各个数据库都是支持sql语句的.可是每一个数据库也有每一个数据库所支持的操作函数,这些就是单行函数.假设想进行数据库开发的话.除了要回使用sql语句外,就是要多学习函数. 1.单行函数的分类: ...

  3. Oracle单行函数用法

    单行函数分为五种类型:字符函数.数值函数.日期函数.转换函数.通用函数. 1.字符函数: 对于输入的字符转换为需要转为的字符或数值. upper()大写 --小写字母转为大写字母 --对于表指定的字符 ...

  4. Oracle单行函数。。。

    单行函数 --字符函数--1.ASCII 返回与指定的字符对应的十进制数;select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') spa ...

  5. Oracle单行函数基础运用

    单行函数 整个SQL的精髓:select语句+单行函数(背) 字符串函数 常用的处理字符串的函数有如下: No. 函数名 含义 1 UPPER(c1)  upper 将字符串全部转为大写 2 LOWE ...

  6. 关于Oracle单行函数的讲解

    单行函数:对单个数值进行操作,并返回一个值. 分类:1.字符函数    1)concat(a,b) 拼接a,b两个字符串数据    2)initcap(x) 将每个单词x首字母大写     3)low ...

  7. Oracle——单行函数

    两种 SQL 函数 单行函数 字符函数 大小写控制函数 SELECT employee_id, last_name, department_id FROM employees WHERE last_n ...

  8. oracle单行函数之类型转换

    oracle数据类型转换:显示转换盒隐式转换 oracle自动完成转换

  9. oracle单行函数之数字函数

    round--四舍五入函数 trunc--截断函数 mod--求余函数 round和trunc除了可以操作数字外还可以操作日期. Demo SQL),),),),) from dual ; ) ) ) ...

随机推荐

  1. 6、JavaScript进阶篇③——浏览器对象、Dom对象

    一.浏览器对象 1. window对象 window对象是BOM的核心,window对象指当前的浏览器窗口. window对象方法: 注意:在JavaScript基础篇中,已讲解了部分属性,windo ...

  2. 逻辑卷管理LVM (Logical Volume Manager)

    什么是LVM? LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的 ...

  3. 三层交换配置VLAN+DHCP+ACL

    使用思科模拟软件Cisco Packet Tracer Student,软件功能有限,只能架设简单的网络架构,适合初学者使用.

  4. Tigase Server Clustering

    首先,在服务器上启用集群 修改init.properties --cluster-mode=true 自定义端口 允许自定义,但是所有的实例都要使用相同的端口,以便通讯 --cl-comp-ports ...

  5. java万物皆对象

    我们以Dom对象的形式 可以CRUD xml文件或xml字串(经流把xml文件读出转成字串) 我们以JsonObject对象的形式 可以CRUD json字串 还有正则表达式.ORM都是.

  6. JDK里的设计模式

    一.Creational patterns 创建模式 Abstract factory (recognizeable by creational methods returning the facto ...

  7. logistic regression的一些问题,不平衡数据,时间序列,求解惑

    Logistic Regression 1.在有时间序列的特征数据中,怎么运用LR? 不光是LR,其他的模型也是. 有很多基本的模型变形之后,变成带时序的模型.但,个人觉得,这类模型大多不靠谱. 我觉 ...

  8. jquery获取自身元素的html

    在开发过程中,jQuery.html() 是获取当前节点下的html代码,并不包含当前节点本身的代码,然而我们有时候的确需要,可以通过jQuery.prop("outerHTML" ...

  9. 转:python webdriver API 之 验证码问题

    对于 web 应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来说使用验证码可以有效果的防止采用机器猜测 ...

  10. PHP检测用户名是否存在

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