所有的单行函数可以在SQL语句的任意位置上出现。
一、字符串函数
UPPER()、LOWER()、INITCAP()、REPLACE()、LENGTH()、SUBSTR()
1、大小写转换函数
小写转大写函数:字符串 UPPER(列|字符串)
大写转小写函数:字符串 LOWER(列|字符串)
如果想在Oracle之中验证字符串函数,需要写完整的SQL语句。为了可以方便地进行函数验证,往往会使用一张虚拟表,dual表
2、首字母大写
语法:字符串 INITCAP(列|字符串)
除了首字母变为大写之外,其余的字母都是小写。例:
3、计算字符串长度
语法:数字 LENGTH(列|字符串数据)
4、字符串替换,可以使用指定的内容替换掉原始字符串中的数据(可以消除字符串中一些我们不需要的内容)
语法:字符串 REPLACE(列|字符串,要查找的内容,新的内容)
5、字符串截取
语法一:字符串 SUBSTR(列|数据,开始点),从指定的开始点一直截取到结尾
语法二:字符串 SUBSTR(列|数据,开始点,截取长度),截取指定范围的子字符串
对于SUBSTR()函数要记住一点,它的下标是从1开始的,也就是说在进行截取的时候字符串从1开始作为索引下标,即使你设置的是0也会按照1来处理。
SUBSTR()支持,可以设置负数索引。例:select substr(ename,-3) from emp就意味着从倒数第三位开始截取字符串,实际上只有Oracle才支持这种负数的索引设计,其他任何语言都没有。
二、数值函数
数值函数就是针对于数字进行处理的,主要函数:ROUND()、TRUNC()、MOD()
1、四舍五入操作:
语法:数字 ROUND(列|数字【,保留小数位】),如果不设置保留小数位表示不保留
2、截取小数,所有的小数都不进位
语法:数字 TRUNC(列|数字【,小数位】)
3、求模(求余数)
语法 MOD(列1|数字1,列2|数字2)
三、日期函数
1、为了取得当前的日期时间,为此在Oracle中专门提供有一个数据伪列。指的是它是一个列,但是这个列不存在与表中,可是却可以像表的列一样进行查询,这个伪列就是SYSDATE
2、计算两个日期间所经历的月数总和:
语法:数字 MONTHS_BETWEEN(日期1,日期2)
计算年,通过月数来计算
3、增加若干月之后的日期
语法:日期 ADD_MONTHS(日期,月数)
4、计算指定日期所在月的最后一天
语法:日期 LAST_DAY(日期)
5、计算下一个指定的星期
语法:日期 NEXT_DAY(日期,一周时间数)
综合案例:
四、转换函数
转换函数一共提供有三种:TO_CHAR()、TO_DATE()、TO_NUMBER()
1、转字符串函数,数字或者日期可以转换为字符串
语法:字符串 TO_CHAR(列|数字|日期,转换格式)
对于转换格式而言主要有两类格式:
日期转换为字符串:年(yyyy)月(mm)日(dd)时(hh,hh24)分(mi)秒(ss)
数字转换为字符串:任意的一位数字(9表示)、货币(L表示,本地货币)
这样的转换操作只是给我们提供了一个思想:日期要想改变格式,最终的数据类型就是字符串。这样转换实际上会破坏程序的一致性。
TO_CHAR()的好处,它可以实现年月日的拆分
Oracle实际上提供有数据类型的自动转换,如果发现比较的类型不统一,在一定的范围内它是可以转换的,所以上例也可以使用:select * from emp where to_char(hiredate,'mm')=2;
TO_CHAR()函数还支持数字转换,所谓的数字转换实际上进行一些格式化的操作
转换数字的时候,当指定的格式位比数字位短的时候,转换之后显示的内容是####,给它限定的位数小的时候就会用#表示。
五、通用函数(Oracle自己特色)
Oracle里面提供有两个简单的数据处理函数:NVL()、DECODE(),并且随着版本的提升,这两个函数又衍生出了很多子函数。
1、处理null
所有没有佣金的雇员在进行年收入计算的时候,最终的计算结果都是null,因为null在进行任何数学计算后结果永恒都是null,而实际在计算之中,发现内容为null,数字的话应该用0来替代,那么就需要利用NVL()函数解决此类问题。
语法:NVL(列|null,为空的默认值)。如果现在列上的内容不是null,则使用列的数据,如果为null则使用默认值。
2、多数值判断
所谓的多数值判断指的是根据不同的结果可以在输出的时候进行一个数据的转换。假设现在每一位雇员都有自己的职位,那么现在职位使用的是英文描述,决定将其更换为中文。
语法:DECODE(列,匹配内容1,显示内容1,匹配内容2,显示内容2,...[,默认值])