单行函数
所谓的单行函数指的就是完成某一具体功能的操作函数,例如:转大小写等。一般而言,单行函数的格式:返回值 函数名称(参数)。
单行函数分为以下几种:字符串函数、数值函数、日期函数、转换函数、通用函数。
1.字符串函数
字符串函数是处理字符串数据的(对于字符串的数据有可能是从列上找到的,或者是直接设置的字符串常量)。包含的函数有如下几种:
| No | 函数名称 | 返回类型 | 描述 |
| 1 | UPPER(列|字符串) | 字符串 | 将传入的字符串变成大写形式 |
| 2 | LOWER(列|字符串) | 字符串 | 将传入的字符串变成小写形式 |
| 3 | INITCAP(列|字符串) | 字符串 | 开头首字母大写,其他的字母变为小写 |
| 4 | LENGTH(列|字符串) | 数字 | 取得指定字符串的长度 |
| 5 | SUBSTR(列|字符串,开始索引,[长度]) | 字符串 | 进行字符串的截取,如果没有设置长度,表示从截取全部 |
| 6 | REPLACE(列|字符串,旧内容,新内容) | 字符串 | 将指定的字符串数据以新数据替换旧数据 |
范例:
在Oracle里面,所有的函数如果要想进行验证,也必须编写SQL语句。为了方便用户进行一些验证或者是一些不需要查询表的查询操作,专门提供了一个dual的虚拟表。
1.转大写小写操作
1)转大写
SELECT UPPER('hello') FROM dual;
2).将所有姓名转小写
SELECT LOWER(ename) FROM emp;
一般在一些不区分数据大小写的情况都会同意的将所有的内容转成大写或小写的形式处理。
2.首字母大写其他字母小写
1)将所有的雇员姓名以首字母大写的形式保存
SELECT INITCAP(ename) FROM emp;
3.取得字符串的长度
1)基础操作
SELECT LENGTH('ddffgg') FROM dual;
2)查询雇员姓名长度为5的全部雇员信息
SELECT * FROM emp WHERE LENGTH(ename)=5;
4.字符串截取
1)验证函数
SQL> SELECT SUBSTR('helloworld',6) FROM dual; SUBSTR('HE ---------- world SQL> SELECT SUBSTR('helloworld',0,5) FROM dual; SUBSTR('HE ---------- hello
在程序之中所有的字符串的首字母的索引都是0,但是在Oracle里面,所有的字符串的首字母索引都是1,如果设置的是0 ,那么它也会按照1的方式进行处理。
2)要求截取每个雇员姓名的前三个字母
SELECT SUBSTR(ename,1,3) FROM emp;
3)取每个雇员姓名的后三位
SELECT SUBSTR(ename,-3) FROM emp;
2.数值函数
数值函数主要是进行数字的处理,最为核心的数值函数一共有三个。
| No | 函数名称 | 返回类型 | 描述 |
| 1 | ROND(列|数字 [,小数位]) | 数字 |
实现数据的四舍五入,可以设置保留小数位 |
| 2 | TRUNC(列|数字 [,小数位]) | 数字 | 实现数据的截取(不进位) |
| 3 | MOD(列|数字 [,小数位]) | 数字 | 求模 |
1.ROUND()函数
1)使用ROUND函数
SQL> SELECT ROUND(545,56) FROM dual; ROUND(545,56) ------------- 545
2)使用ROUND函数
SQL> SELECT ROUND(1.2357,2) FROM dual; ROUND(1.2357,2) --------------- 1.24
SQL> SELECT ROUND(769.2,-2) FROM dual;
ROUND(769.2,-2)
---------------
800
SQL> SELECT ROUND(732,-2) FROM dual;
ROUND(732,-2)
-------------
700
2.TRUNC()函数
SQL> SELECT TRUNC(532.4567), 2 TRUNC(532.4567,2), 3 TRUNC(532.4567,-2) 4 FROM dual; TRUNC(532.4567) TRUNC(532.4567,2) TRUNC(532.4567,-2) --------------- ----------------- ------------------ 532 532.45 500
3.MOD()函数
SQL> SELECT MOD(12,5) FROM dual; MOD(12,5) ---------- 2
3.日期函数
如果要想处理任何日期,那么都有一个基本的前提,必须知道当前的日期是什么。如果要想取得当前日期时间,在Oracle中专门提供了一个伪列:SYSDATE(SYSTIMESTAMP)
范例:验证伪列
SQL> SELECT SYSDATE FROM dual;
SQL> SELECT SYSTIMESTAMP FROM dual;
范例:进一步观察伪列
SQL> SELECT ename,job,SYSDATE FROM emp;
SYSDATE伪列里面包含有日期时间的内容,只不过现在只显示了日期数据。如果清楚了当前日期,还需要清楚三个日期的操作公式。
1.日期 + 数字 = 日期(表示若干天之后的日期)
2.日期 - 数字 = 日期(表示若干天之前的日期)
3.日期 - 日期 = 数字(天数)
范例:实现日期的基本操作
SELECT SYSDATE-20,SYSDATE+250 FROM dual;
对于日期而言,由于每个月的天数是不同的,所以直接进行天数加法计算月数是不准确的。
范例:要求查询出每个雇员的编号、姓名、职位、已经被雇佣的天数
SELECT empno,ename,job,SYSDATE-hiredate FROM emp;
如果直接使用天数来实现年或月的计算,那么最终的结果一定是不准确的。
为了准确的进行日期操作,在Oracle里面提供有四个日期处理函数。
| No | 函数名称 | 返回类型 | 描述 |
| 1 | ADD_MONTHS(列|(日期,月数)) | 日期 | 在指定日期上增加若干个月之后的日期 |
| 2 | MONTHS_BETWEEN(列|日期,列|日期) | 数字 | 返回两个日期之间的所经历的月数 |
| 3 | LAST_DAY(列|日期) | 日期 | 取得指定日期所在月的最后一天 |
| 4 | NEXT_DAY(列|日期,星期X) | 日期 | 返回下一个指定的一周时间数对应的日期 |
范例:在当前日期下增加指定的月份
SELECT ADD_MONTHS(SYSDATE,4) FROM dual;
在进行月数增加的时候是不会限制数据的大小的(只要别太大都行)。
范例:计算所有雇员到今天为止雇佣的月数
SELECT MONTHS_BETWEEN(SYSDATE,hiredate) FROM emp;
范例:计算当前时间所在月的最后一天的日期
SELECT LAST_DAY(SYSDATE) FROM dual;
范例:要求查询出所有在雇佣所在月倒数第三天雇佣的雇员信息
SELECT * FROM emp WHERE (LAST_DAY(hiredate)-hiredate)=2;
范例:验证NEXT_DAY()函数
SELECT NEXT_DAY(SYSDATE,'MON') FROM dual;
4.转换函数
到现在位置已经接触过了数字型、字符串型、日期型三类数据,它们可以互相转换,则需要使用如下的转换函数完成。
| No | 函数名称 | 返回类型 | 描述 |
| 1 | TO_CHAR(列|日期|数字,转换格式) | 字符串 | 将日期或数字格式化为指定结构的字符串 |
| 2 | TO_DATE(列|字符串,转换格式) | 日期 | 按照指定的转换格式编写字符串后将其变为日期型数据 |
| 3 | TO_NUMBER(列|字符串) | 数字 | 将字符串变为数字 |
1、转字符串函数:TO_CHAR()
如果要想将一个日期或数字变为字符串,那么首先必须清楚转换格式。
1)日期:年(yyyy)、月(mm)、日(dd)
2)时间:时(hh、hh24)、分(mi)、秒(ss)
3)数字:任意数字(9)、本地货币符号(L)
范例:将日期显示格式化
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd') FROM dual;
范例:格式化日期时间
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') FROM dual;
范例:实现日期数据的拆分
SELECT TO_CHAR(SYSDATE,'yyyy'),TO_CHAR(SYSDATE,'mm'),TO_CHAR(SYSDATE,'dd') FROM dual;
范例:要求查询出所有在2月份雇佣的雇员
SELECT * FROM emp WHERE TO_CHAR(hiredate,'mm')='02';
SELECT * FROM emp WHERE TO_CHAR(hiredate,'mm')=2;
Oracle之中提供有自动的转型操作,如果发现类型不匹配会自动完成类型匹配后再进行比较。
处理转换日期之外,还可以转换数字。
范例:格式化数字
SELECT TO_CHAR(772333,'L999,,999,999,999,999') FROM dual;
2、转日期函数(很少用)
范例:将字符串变为日期(很少用)
SELECT TO_DATE('1889-10-19','yyyy-mm-dd') FROM dual;
3、转数字函数(很少用)
范例:
SELECT TO_NUMBER('1')+TO_NUMBER('1') FROM dual;
SELECT '1'+'1' FROM dual;
Oracle里面已经默认提供了许多的自动转换机制,所以针对与转换函数而言,唯一重要的也就在于TO_CHAR()函数。
5.通用函数
通用函数一般指的是Oracle特色函数,主要有两个通用函数:
| No | 函数名称 | 返回类型 | 描述 |
| 1 | NVL(列|NULL,默认值) | 数字 | 如果传入的内容是null,则使用默认数值处理,如果不是null,使用原始数据处理 |
| 2 | DECODE(列}字符串|数值,比较内容1,显示内容1,比较内容2,显示内容2,...[默认显示内容]) | 数据类型 | 设置的内容会与每一个比较内容进行比较,如果内容相同,则会使用显示内容进行输出,如果都不相同,则使用默认信息输出 |
1、处理null函数
范例:要求查询粗每个雇员的编号、姓名、基本工资、佣金、年薪
SELECT empno,ename,sal,comm,(sal+comm)*12 FROM emp;
发现计算之后,没有佣金的雇员就没有年薪存在了,因为佣金为null的时候所做的任何计算结果都是null。为了保证计算结果的准确性,必须将null替换为0,那么这就属于NVL()函数作用范畴了。
SELECT empno,ename,sal,comm,(sal+NVL(comm,0))*12 FROM emp;
2、decode()函数
decode()函数函数类似于程序的if...else,但是与if...else不同的是,此处不能够判断关系,只能够判断内容是否相同。
范例:将所有的职位信息替换为中文显示
SELECT ename,job,DECODE(job,'CLERK','办事员',SALESMAN','销售','PRESIDENT','总裁','MANAGER','经理','ANALYST','分析员','***') FROM emp;
总结
1、每一个函数都只是完成一个独立的功能,并且所有的函数都可以在SQL语句中使用

浙公网安备 33010602011771号