单行函数
现在大部分关系型数据库的操作都是类似的,唯一的区别,个人认为有如下几点。
- 数据存储的区别,不同的数据库有不同的数据存储方案;
- 不同的数据库支出的类型也是不同的。大部分关系型数据库不支持Boolean值。
- 不同的数据库有不同的支持韩束。意义不大,但是很重要。意义在于跨数据库开发。所以意义不大。
大部分的函数都是不需要去可以记忆的。而且对于函数可以直接通过网络查询。在Oracle之中,针对于系统函数定义的基本格式:返回数据类型 函数名称(数据 | 列名称)
,返回的数据类型基本上只有三类:
- 字符串(VARVHAR2)
- 数组(NUMBER)
- 日期(DATE):这一点oracle的日期比较mysql比较特殊,oracle的日期是由日期+时间组成。
根据功能,在oracle之中针对单行函数分为以下几类
1.字符串函数
2.数值函数
3.日期函数:避免闰年闰月问题
4.转换函数
5.通用函数
用的时候拿出来就行了不用强记。
字符串函数
字符串函数主要功能是进行字符串的处理,例如:转大写,转小写,计算长度等等。常见字符串的函数有如下几种:
序号 | 介绍 | 函数体 |
---|---|---|
01 | 转大写函数 | UPPER(数据 | 列) |
02 | 转小写函数 | LOWER(数据 | 列) |
03 | 首字母大写函数 | INITCAP(数据 | 列) |
04 | 计算字符串长度 | LENGTH(数据 | 列) |
05 | 字符串截取 | 字符串SUBSTR(数据 | 列,截取点[,长度]) |
06 | 字符串替换 | REPLAcE(要替换的数据 | 列 , 替换数据) |
如果现在要想进行以上的函数验证,在oracle里面必须要明确的写出完整的SQL语句。(何为完整,必须有SELECT与FROM),但是如果真的这么使用了,就会有一个问题:
SELECT DISTINCT UPPER('HELLO') FROM emp;
如果这样使用的话,就跟查询常量没什么区别了。所以很明显,直接使用一张实体表进行查询是没有任何意义的,所以这个时候方便做法我么可以这么进行。我们可以直接使用oracle内部提供的一张虚拟表完成。这张表的名字为dual。
SELECT UPPER('hello') FROM dual
以上就完成了函数的验证(直接使用真是表的话,有可能数据量很大,时间长,做了没有意义的查询,所以使用oracle提供的虚拟表进行验证)
为什么要有这些函数呢?
1.在进行数据保存操作的时候,必须考虑到一种实际的情况:用户在进行数据添加的时候,未必会正确使用大小写,如在根据姓名查询的时候,用户输入的数据很少会考虑采用大写字母。
用户输入的时候,很少会手动切换大写的SMITH,这种情况下,**为了保证数据查询的准确性,就需要将用户输入的内容自动变为大写字母保存,此时就可以使用UPPER()函数,来解决设计问题。
即:
SELECT * FROM emp WHERE ename = UPPER('&inputname') ;
在很多系统设计的时候都没有考虑用户输入的用户名大小写问题,因为在用户注册的时候都是用了UPPER()函数将用户名变为了大写字母。
2.lower函数,场景查询所有雇员姓名,要求姓名的字母采用小写字母表示。
SELECT LOWER(ename) FROM emp ;
这句话就是,从emp表中找到所有的ename数据列对应的数据行,然后再将所有的ename变为小写字母的形式。
3.将所有雇员名称的首字母变为大写处理
SELECT INITCAP(ename) FROM emp ;
4.替换函数
5.计算字符串长度
范例:查询出每个雇员的姓名、 姓名的长度。
对于数据行的筛选在WHERE子句中执行。
SELECT length(ename) nl FROM emp WHERE ength(ename) = 5 ;
WHERE在SELECT之前执行,所以无法使用"nl"这个别名。6.字符串函数里面最有意思的就是一个字符串截取函数:SUBSTR();
主要用法:
1.由指定索引截取到结尾。(oracle中字符串开始的值为1,但是如果设置为0则与1一样。)
SELECT SUBSTR('hellowold',5) FROM dual;什么叫5呢?从一开始数到第5个。即从第五个截取到所有。
SELECT SUBSTR('helloworld',6,2)
即从6开始截取2个。从零开始取五个与一开始取五个。结果没有区别。
索引的值也可以为负数,表示由结尾开始的指定索引开始。
输出为world。
范例:
如果没有负数,就需要我们自己去计算截取点(通过计算出长度然后...)
数值函数
数值函数的功能主要是进行一些数字的操作,提供有如下三种常见的操作:
1.ROUND(数据 | 列 [,保留小数位]):进行四舍五入处理。重点
2.TRUNC(数据 | 列 [,保留小数位]):进行数据截取-非四舍五入不进位。
3.MOD(数据 | 列 ,数据 | 列 ...):求余数。
只有当经过FEOM与WHERE限定之后,这样就会找到所有你需要的数据行,SELECT是对挑出数据列或者对经过前步找到的数据进行计算。比如单行函数,四则运算,去重复,别名等等。
范例:数据截取:
范例:求模计算