Oracle 单行函数
一、什么是函数
任何东西,只要它能接收输入,对输入进行加工并产生输出,它就可以被称为函数。
二、单行函数简介
单行函数只对表中的一行数据进行操作,并且对每一行数据只产生一个输出结果。单行函数可以接受一个或多个参数,其产生的输出结果的数据类型可能与参数的数据类型不同。
单行函数包含:
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 单行函数的更多相关文章
- Oracle单行函数笔记
Oracle中单行函数的分类:1.字符函数substr():字符串截取select substr('我爱你,你知道么?',0,4) from dual执行结果:我爱你,length函数:字符串长度se ...
- Oracle单行函数
一.尽管各个数据库都是支持sql语句的.可是每一个数据库也有每一个数据库所支持的操作函数,这些就是单行函数.假设想进行数据库开发的话.除了要回使用sql语句外,就是要多学习函数. 1.单行函数的分类: ...
- Oracle单行函数用法
单行函数分为五种类型:字符函数.数值函数.日期函数.转换函数.通用函数. 1.字符函数: 对于输入的字符转换为需要转为的字符或数值. upper()大写 --小写字母转为大写字母 --对于表指定的字符 ...
- Oracle单行函数。。。
单行函数 --字符函数--1.ASCII 返回与指定的字符对应的十进制数;select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') spa ...
- Oracle单行函数基础运用
单行函数 整个SQL的精髓:select语句+单行函数(背) 字符串函数 常用的处理字符串的函数有如下: No. 函数名 含义 1 UPPER(c1) upper 将字符串全部转为大写 2 LOWE ...
- 关于Oracle单行函数的讲解
单行函数:对单个数值进行操作,并返回一个值. 分类:1.字符函数 1)concat(a,b) 拼接a,b两个字符串数据 2)initcap(x) 将每个单词x首字母大写 3)low ...
- Oracle——单行函数
两种 SQL 函数 单行函数 字符函数 大小写控制函数 SELECT employee_id, last_name, department_id FROM employees WHERE last_n ...
- oracle单行函数之类型转换
oracle数据类型转换:显示转换盒隐式转换 oracle自动完成转换
- oracle单行函数之数字函数
round--四舍五入函数 trunc--截断函数 mod--求余函数 round和trunc除了可以操作数字外还可以操作日期. Demo SQL),),),),) from dual ; ) ) ) ...
随机推荐
- 3、DOM操作
一.认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面 ...
- 字符集WideCharToMultiByte
GDAL C#封装对中文字符转换过程中存在问题. C++封装一个Win32 DLL,采用Unicode字符集.使用标准头文件. https://msdn.microsoft.com/en-us/lib ...
- iOS支付后默认关注公众号
1.这个是微信内部的功能,不对外公开,需要商务洽谈.跟技术无关. 2.同时金额少于1块的也不会有提示关注显示. 3.关注过的不会默认再次关注,但是仍然有选项可以选择.
- spring mvc 的Controller类默认Scope是单例(singleton)的
使用Spring MVC有一段时间了,之前一直使用Struts2,在struts2中action都是原型(prototype)的, 说是因为线程安全问题,对于Spring MVC中bean默认都是(s ...
- Swift实战-小QQ(第2章):QQ侧滑菜单
QQ侧滑实现架构:需要建立以下几个ViewController:1.XQBaseViewController 2.LeftViewController3.RightViewController4.Co ...
- chat
启动服务器 连接数据库 导入数据库并显示 开启监听 与客户端建立连接 写入数据库并显示 创建线程用来接受客户端消息
- 无向连通图求割边+缩点+LCA
Network Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7082 Accepted: 2555 Descripti ...
- 树形DP(Rebuilding Roads poj1947)
题意:给出一颗树,求要形成一颗元素个数是p的子树,最少要去掉多少边 #include"stdio.h" #include"string.h" #include& ...
- Web TreeView 加载级联数据
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { dt = BLL.GetTable(); LoadL ...
- acm算法模板(1)
1. 几何 4 1.1 注意 4 1.2 几何公式 4 1.3 多边形 6 1.4 多边形切割 9 1.5 浮点函数 10 1.6 面积 15 1.7 球面 16 1.8 三角形 17 1.9 三维几 ...