1、二、 数字函数各种数学函数ORACLE都可以计算如:ABS(N)可以求绝对值。三角函数 SIN COS TAN ASIN ACOS ATAN 。自然函数 EXP LN LOG 。开方SQRT。常用的数字函数有:(一) Round (n,m) 取四舍五入结果,当m省略的时候四舍五入到整数位 如: Round(34.916,2)=34.92 Round(34.916)=35(二) Trunc (n,m) 截断数字,当m省略的时候直接取到整数位 Trunc(34.916,2)=34.91 Trunc(34.916)=34(三) MOD (m,n) 取余数,n=0返回结果为m Mod(1600,300
2、)=100 Mod(1600,0)=1600三、 字符函数 (一) concat(str1,str2) 连接两个字符串 注意:跟“|”用法类似(二) length(str1) 计算字符串的长度如:(三) Substr(str1,m,n) 截取指定长度的字符串。m:开始长度 n:截取的字符串长度,如果为空,默认截取到字符串结尾。(四) Lpad(str1,n,str2) 左端填充字符串,返回指定长度为n的字符串(五) Rpad(str1,n,str2) 右端填充字符串,返回指定长度为n的字符串(六) INSTR(str1,str2,n1,n2) 返回str2在str1中位置其中str1:原字符串
3、;str2:要寻找的字符串;n1:查询起始位置,正值表示从左到右,负值表示从右到左 ,省略不写,默认为1,n2:第几个匹配项,省略不写,默认为1四、 日期函数 Oracle 数据库用内部数字格式存储日期:世纪,年,月,日,小时,分钟和秒默认日期显示格式是DD-MON-RR。日期加上或减去数字,结果是另一个日期值两个日期相减可以得到天数,注意:日期+1等于明天 +1/24等于下一小时(一) MONTHS_BETWEEN(date1, date2) 计算date1和date2之间的月数,结果的小数部分表示月的一部分(二) ADD_MONTHS(date, n): 添加n个日历月到date。n的值必
4、须是整数,但可以是负的。(三) NEXT_DAY(date, char)计算在date之后的下一个周(char)的指定天的日期。char的值可能是一个表示一天的数或者是一个字符串。(四) last_day(date) 返回特定日期所在月份的最后一天如 (五) Sysdate 用于返回当前系统时间,每一次执行sysdate的结果都不一样五、 转换函数 在某些情况下,Oracle服务器使用一种数据类型的数据,而在另外一种情况下我们希望使用一种不同数据类型的数据,如果这种情况发生,Oracle服务器自动转换数据为期望的数据类型。这种数据类型的转换可以被Oracle服务器隐式进行,或由用户显式进行。显
5、式数据类型转换用转换函数进行。转换函数转换从一种数据类型转换值到另一种数据类型。通常,函数名的构成遵循 数据类型 到 数据类型 的约定,第一个数据类型是输入数据类型;后一个数据类型是输出数据类型。注:尽管隐式数据类型转换是可用的,但建议你做显式数据类型转换以确保SQL语句的可靠性。分类图如下:(一) 隐式数据类型转换对于直接赋值,Oracle 服务器能够自动地进行下面的转换:(二) 显式数据类型转换转换图示如下:(三) 对日期使用TO_CHAR函数格式如下:使用时应注意:1、 必须加单引号,并且区分大小写2、 能够包含任一有效的日期格式元素3、 有一个fm元素用来删除填补的空或者前导零4、 用
6、一个逗号与日期值分开(四) 对数字使用TO_CHAR函数 例一:例二:(五) 使用TO_NUMBER和TO_DATE函数 格式如下:六、 空值函数 NVL(变量,常数) 其中变量为任意变量,常数为任意类型。当仅当变量为空值时,将结果输出为常数,如变量不为空,输出变量的值七、 DECODE函数 DECODE(exp,s1,r1,s2,r2.s,r,def) 可以把它理解成一个增强型的if else,只不过它并不通过多行语句,而是在一个函数内实现if else的功能。exp做为初始参数。s做为对比值,相同则返回r,如果s有多个,则持续遍历所有s,直到某个条件为真为止,否则返回默认值def(如果指定
7、了的话),如果没有默认值,并且前面的对比也都没有为真,则返回空。 例如: emp表中如果 JOB 是 SALEMAN,薪水增加 10%;如果 JOB 是 CLERK,薪水增加 5%;如果 JOB 是 ANALYST,薪水增加 20%。对于所有其他的工作角色,不增加薪水。 分析: 相当于用一个 IF-THEN-ELSE 语句来表达: IF job = SALEMAN THEN sal = sal*(1+10/100) CLERK THEN sal = sal* (1+5/100) ANALYST sal = sal*(1+20/100) ELSE sal = sal 解题: 方法一: Selec
8、t ename,job ,sal, sal*(1+10/100) as r_sal from emp where job=SALEMAN;Select ename,job ,sal, sal*(1+5/100) as r_sal from emp where job=CLERK;Select ename,job ,sal, sal*(1+20/100) as r_sal from emp where job=ANALYST;虽然符合题目但是得分别查询,看起来不方便 方法二: 使用decode函数 Select ename,job ,sal, decode(job,SALEMAN,sal*(1+10/100),CLERK,sal*(1+5/100),ANALYST, sal*(1+20/100),sal) as r_salfrom emp ;