单行函数函数分为单行函数和多行函数单行函数:操作数据对象接受参数返回一个结果只对一行进行变换每行返回一个结果可以转换数据类型可以嵌套参数可以 是一列或一个值一.字符函数字符函数是oracle中最常用的函数字符函数分为大小写控制函数和字符控制函数1.大小写控制函数◆low er:将字符串转化为小写的格式lower(''SQLCourse'')sqlcourse◆uppe:将字符串转化为大写的格式up pe(''SQLCourse'')SQLCOURSE◆initcap:将字符串的首字母转化为大写initcap(''SQLCou rse'')SqlCourse2.字符控制函数◆concat:连接字符CONCAT(''Hello'',''World'')Hel loWorld◆substr:取字符串的子串SUBSTR(''HelloWorld'',1,5)Hello(这里的1,是指从第1位 开始取,5是指取的长度)◆length:返回字符串的长度LENGTH(''HelloWorld'')10◆instr:指定某个字符在 字串中的位置INSTR(''HelloWorld'',''W'')6◆lpad:当查询工资时,要求显示10位数字,工资不满足10位, 在左边用填充LPAD(salary,10,'''')24000◆rpad:当查询工资时,要求显示10位数字,工 资不满足10位,在右边用填充RPAD(salary,10,'''')24000◆trim:指定某个字符在字串 中去除TRIM(''H''FROM''HelloWorld'')elloWorld◆replace:把字串中的X字符,用Y字符替换掉 。REPLACE(‘abcd’,’b’,’m’)amcd二.数字函数数字函数的输入参数和返回值的数据类型都是数字类型的.数学函数 包括cos,cosh,exp,ln,log,sin,sinh,sqrt,tan,tanh,acos,asin,atan,roun d,我们讲最常用的:◆round(n,[m]):四舍五入该函数用于执行四舍五入,如果省掉m,则四舍五入到整数;如果m是正数,则四 舍五入到小数点的m位后.如果m是负数,则四舍五入到小数点的m位前ROUND(45.926,2)45.93◆trunc(n,[m ]):截断该函数用于截取数字.如果省掉m,就截去小数部分,如果m是正数就截取到小数点的m位后,如果m是负数,则截取到小数点的前m 位TRUNC(45.926,2)45.92◆mod(m,n):求余MOD(1600,300)100◆floor(n):向 下取整,向下舍入(去除小数点部分)floor(1234.99)1234◆ceil(n):向上取整,向上舍入,(去除小数点部分)f loor(1234.01)1235其他数字函数:abs(n)返回数字n的绝对值selectabs(-13)fromdua l;acos(n):返回数字的反余旋值asin(n):返回数字的反正旋值atan(n):返回数字的反正切cos(n)exp (n):返回e的n次幂log(m,n)返回对数值power(m,n):返回m的n次幂三.日期函数默认情况下日期格式是dd-mon -yy即12-7月-78sysdate:该函数返回系统时间(日期和时间)selectsysdatefrom表名日期的数学 运算在日期上加上或减去一个数字结果仍为日期。两个日期相减返回日期之间相差的天数(日期不允许做加法运算,无意义)例:查询90号部门员 工的工作周数selectlast_name,(sysdate-hire_date)/7ASWEEKSfromemploy eeswheredepartment_id=90MONTHS_BETWEEN:两个日期相差的月数MONTHS_BETWEEN (''01-SEP-95'',''11-JAN-94'')19.6774194ADD_MONTHS:向指定日期中加上若干月数ADD_ MONTHS(''11-JAN-94'',6)''11-JUL-94''NEXT_DAY:指定日期的下一个星期对应的日期NEXT _DAY(''01-SEP-95'',''FRIDAY'')''08-SEP-95''LAST_DAY:本月的最后一天LAST_DAY('' 01-FEB-95'')''28-FEB-95''ROUND:日期四舍五入假设SYSDATE=''25-JUL-95'':ROUND( SYSDATE,''MONTH'')01-AUG-95ROUND(SYSDATE,''YEAR'')01-JAN-96TRUNC: 日期截断假设SYSDATE=''25-JUL-95'':TRUNC(SYSDATE,''MONTH'')01-JUL-95TR UNC(SYSDATE,''YEAR'')01-JAN-95四.转换函数数据类型转换分为隐性和显性转换函数用于将数据类型从一种 转为另外一种.在某些情况下,oracleserver允许值的数据类型和实际的不一样,这时oracleserver会隐含的转化数 据类型。隐式数据类型转换(Oracle自动完成下列转换):源数据类型目标数据类型VARCHAR2orCHARNUMBERVA RCHAR2orCHARDATENUMBERVARCHAR2DATEVARCHAR2显示数据类型转换To_char函数对日期的 转换格式:必须包含在单引号中而且大小写敏感。可以包含任意的有效的日期格式。日期之间用逗号隔开。SELECTTO_CHAR(sys date,‘yyyy-mm-dd’)FROMdual;例:查询1994年6月7号来公司的员工Selectemployee _id,hire_dateFromemployeesWhereto_char(hire_data,‘yyyy-mm-dd’)= ’1994-06-07’to_char函数对数字的转换下面是在TO_CHAR函数中经常使用的几种格式:9数字0零$美元符L本地货 币符号(系统自动辨别本地).小数点,千位符例:selectto_char(1234567.89,‘999,999,999.99 ’)fromdual;9是代表数字返回结果:1,234,567.89例:selectto_char(1234567.89, ‘000,000,999.99’)fromdual;0是代表0,不够位,则填充0返回结果:001,234,567.89例:s electto_char(1234567.89,‘$000,000,999.99’)fromdual;返回结果:$001,2 34,567.89TO_data函数对字符的转换例:查询1994年6月7号来公司的员工Selectemployee_id,hi re_dateFromemployeeswhereto_data(‘1994/06/07’,‘yyyy/mm/dd’)=hir e_data例:查询1994年6月7号来公司的员工Selectemployee_id,hire_dateFromemploy eesWhereto_char(’1994-06-07’,‘yyyy”年”-mm”月”-dd”日”’)=hire_data(如需 穿插字符时,需用””号把字字符括起来)TO_NUMBER函数对数字的转换使用TO_NUMBER函数将字符转换成数字:例:se lectto_number(‘$001,234,567.89’,‘$000.000.999.99’)+1Fromdual通用 函数这些函数适用于任何数据类型,同时也适用于空值:NVL(expr1,expr2)NVL2(expr1,expr2,ex pr3)NULLIF(expr1,expr2)COALESCE(expr1,expr2,...,exprn)NVL( expr1,expr2)函数将空值转换成一个已知的值:可以使用的数据类型有日期、字符、数字。NVL(commission_pc t,0)如果nvl为非空值,则返回原来的值,如果nvl为空值,则按0或指定名称来显示。例:输出last_name,departm ent_id,当department_id为null(空值)时,显示0。Selecelast_name,nvl(departme nt_id,0)fromemployees例:输出last_name,department_id,当department_id 为null(空值)时,显示’没有部门’。Selecelast_name,nvl(to_char(department_id, ‘99999’),‘没有部门’)fromemployees或Selecelast_name,nvl(to_char(dep artment_id),‘没有部门’)fromemployees???NVL2(expr1,expr2,expr3)函数 NVL2(expr1,expr2,expr3):expr1不为NULL,返回expr2(可以是expr1);为NULL, 返回expr3。例:查询员工的资金率,若不为空,返回实际资金率+0.015,若为空,则返回0.01Selectlast_name ,commission_pct,nvl2(commission_pct,commission_pct+0.015,0.01)Fro memployees;使用NULLIF函数NULLIF(expr1,expr2):相等返回NULL,不等返回exp r1使用COALESCE函数COALESCE与NVL相比的优点在于COALESCE可以同时处理交替的多个值。如果第 一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE。六.条件表达式在SQL语句中使用IF-THEN-ELS E逻辑使用两种方法:CASE表达式DECODE函数CASE表达式CASEexprWHENcomparison_exp r1THENreturn_expr1[WHENcomparison_expr2THENreturn_expr2WHE Ncomparison_exprnTHENreturn_exprnELSEelse_expr]END例:查询部门号为1 0,20,30的员工信息,若部门号为10,则打印其工资的1.1倍,20号部门,则打印其工资的1.2倍, 30号部门打印其工资的1.3倍数Selectemployee_id,last_name,department_id,cas edepartment_idwhen10thensalary1.1when20thensalary1.2 elsesalary1.3endnew_sal(别名)FromemployeesWheredepartment_ idin(10,20,30)DECODE函数DECODE(col|expression,search1,result1, [,search2,result2,...,][,default])例:查询部门号为10,20,30的员工信息,若部门号为10,则打印其工资的1.1倍,20号部门,则打印其工资的1.2倍,30号部门打印其工资的1.3倍数Selectemployee_id,last_name,department_id,decode(department_id,10,salary1.1,20,salary1.2elsesalary1.3)new_sal(别名)FromemployeesWheredepartment_idin(10,20,30) |
|