SQL函数SQL函数即数据库的内置函数,可以应用在SQL语句中实现特定的功能,SQL函数分为单行函数和多行函数,单行函数对于每一行数据进行计算后得到一行输出结果,多行函数是多行数据参与运算得到一行输出结果,(例如分组函数)。单行函数一:字符串函数字符串函数输入的是字符类型,返回值可能是字符或数值。1:大小写转换函数upper、lower、initcap(1)Upper功能:将字符转换为大写形式(2)Lower功能:将字符转换为小写形式(3)Initcap功能:将字符串中每个单词的首字符大写,其他字符小写,单词之间用空格和非字母字符分隔。演示:selectupper(‘helloword’)fromdualselectename,empno,jobfromempwherelower(ename)=‘scott’selectInitcap(‘helloword’)fromdual2:字符串连接函数ConCATCONCAT(char1,char2)函数返回两个字符串连接后的结果,它完全等价于连接运算符’||’.例如selectconcat(‘Ilove’,’sql’)fromdual;Concat和||的区别Concat函数参数只能是字符类型,而||可以连接多种类型3:获取字串函数SUBSTR函数SUBSTR(char,[m[,n]]用于获取字符串的字串,返回从char中m位开始取的n个字符,如果m为正数,则从左往右取起,如果m位为负数,则从右往左取起,如果没有n,或者n的长度超过了char的长度,则取到字符串末尾为止。例:selectsubstr(‘IloveSQL’,3,4)4、求字符串长度函数LENGTHLENGTH函数是求字符长度的函数,返回的是数值类型例:selectlength(‘IloveSQL’)fromdual;5:获取字串在字符串中的位置函数INSTRINSTR(char1,char2[,n[,m]])函数用于取得字串在源字符串中的位置,也就是在char1中搜索char2,从n的位置开始搜索,如果没有指定n,就从第一个字符开始搜索。M用于指定字串的第m次出现次数,如果不指定也取值为1,如果在char中没有找到子串,则返回0.例:selectinstr(‘doctorwho’,‘who’)wordsfromdual;6:补位函数lpad、rpadLPAD(char1,n,char2)、RPAD(char1,n,char2)分别叫做左补位函数和右补位函数,用于在字符串char1的左端或右端用char2补足到n位,char2可重复多次。例:selectLPAD(‘travelsintardis’,28,’doctorwho’)wordsfromdual例:selectRPAD(‘travelsin‘,17,’tardis’)wordsfromdual7:截去字串函数trim、ltrim、rtrimTRIM(c2fromc1)、LTRIM(c1[,c2])、RTRIM(c1[,c2)函数的作用都是截去子串,其中c1表示源字符串,c2是被截去的字串,意思即从c1的前后,左边,右边去掉c2,如果没有c2,去掉空格.Trim函数的一个非常有用的功能是去除一个字符前后的空格,这种用法trim函数只有一个参数。例:selecttrim(‘中秋八月中‘)fromdual;8:替换函数REPLACEREPLACE(char,search_string[,replace_string]函数用来替换字符串中的子串。意思是把char中把search_string替换为replace_string,如果没有replace_string,默认用空格替换.例:selectreplace(‘doctortravleswithrose’,’rose’,’martha’)wordsfromdual;9:ASCII码和字符的对应函数ascii、chrASCII(char)、CHR(n)这两个函数互为逆函数,根据字符和ascii码值的对应关系,ASCII(char)返回char的ascii码值,CHR(n)返回n对应的字符.例:selectCHR(65)CHR_65,ascii(‘A’)fromdual;二:常用数学函数1、ROUND、TRUNCROUND(n[,m])函数用于四舍五入,参数中的n可以是任何数字,指要被处理的数字,m必须是整数,m如果取正数则四舍五入到小数点后第m位,如果m取0则四舍五入到整数位,如果m取负数,则四舍五入到小数点前m位,如果m缺省,默认值为0。例:selectround(45.678,2)fromdual;selectround(45.678,0)fromdual;Selectround(45.678,-1)fromdual;Trunc(n[,m])用于截取,其中n和m的定义和round(n[m])相同。2、cell、floorCell(n)、floor(n)CELL(n):天花板数,就是取大于或等于n的最小整数值。Floor(n):地板数,就是取小于或等于n的最大整数值.例:selectcell(45.678)fromdual;selectfloor(45.678)fromdual;3、ABS、MOD、SIGN、POWER、SQRTABS(n):返回n的绝对值MOD(m,n):返回m除以n后的余数,如果n为0则直接返回m;SIGN(n):用于检测数字的正负,如果n是正数返回1,负数返回-1,如果n等于0则会返回0.Power(m,n)返回参数M的n次幂,SQRT(n)返回n的平方根.三:日期函数日期函数操作date类型数据,得到新的日期值或数字。1、sysdate:该函数没有参数,返回当前的系统时间,显示格式默认为DD-M月—yy,也可以使用函数to_char显示为指定的格式。例:selectsysdatefromdual;2、MONTHs_BETWEENMONTHs_BETWEEN(date1,date2)计算date1和date2两个日期值之间间隔了多少个月,注意是date1-date2,如果date2时间比date1晚,会得到负值。如果要获得两个日期间隔多少天,可以直接用两个日期值相减。3、ADD_months函数ADD_month(date,n)函数主要是在指定日期基础上加上相应的月份,返回值是日期类型例:selectadd_month(sysdatem6)six_month_laterfromdual;如果要在一个日期值上加上I天,可以直接在日期上加上整数i。4、NEXT_DAYNEXT_DAY(date,char)返回date日期数据的下一个周几,周几是由参数char来决定的,在中文环境下,直接使用”星期三”这种形式,英文环境下,需要使用“Wednesday”例:selectnext_day(sysdate,’星期三’)next_wednfromdual;查找下个星期三的日期5、LAST_DAYLAST_DAY(date)返回日期date所在月的最后一天。例:selectlast_day(sysdate)fromdual;6:EXTRACTEXTRACT(datefromdatetime)从参数datetime中提取参数date指定的数据,比如提取年、月、日,显示当前月份和年等。例:selectextract(yearfromsysdate)fromdual;7:TRUNC函数TRUNC(date[,’fmt’])对日期进行指定格式的截断操作按月截断时,返回当前月份的第一天按年截断时,会返回当年的第一天例:selecttrunc(sysdate,’MONTH’)fromdual;selecttrunc(sysdate,’year’)fromdual;四:转换函数转换函数用来实现在不同数据类型之间进行转换。1:日期到字符转换函数to_char该函数的作用就是将其他类型的数据转换为字符类型To_char(date|number[,’fmt’]函数主要完成把日期类型、数字类型的表达式或列转换为字符类型,‘fmt’指的是需要显示的格式,需要写在单引号内。例:selectto_char(sysdate,’YYYY/MM/DD’)fromdual;Selectto_char(sal,’$9999’)fromemp;2:TO_DATE(char[,’fmt’]函数主要功能是把字符类型列或表达式转变为日期格式实例:selectto_date(‘1982-01-01’,’yyyy-mm_dd’);3:字符到数字转换函数to_numberTo_char(number[,fmt])用于将数字number按照fmt格式转换成字符类型的数据,fmt一定要遵循一定的格式。常用的数学格式如下。格式说明例子9一位数字9999(四位数字)0一位数字或前导00999或9990.或D在指定位置显示小数点99.99或99D99,或G千位分隔符9,999或9G999$在数字前加美元符号$9999L在数字前加本地货币符号L9999C在数字前加国际货币符号C999B在数字前加空格B9999S在数字前或后加正负号9999S或S9999常用的日期格式格式说明例子YY两位数字的年份08YYYY四位数字的年份2008YEAR英文全拼的年份MM两位数字的月份DD两位数字的天HH2424小时制的小时晚上8点_20HH1212小时制的小时晚上8点_08MI显示分钟SS显示秒五:其他函数其他函数主要包括与空值(null)相关的一些函数以及条件处理函数,与空值(null)相关函数主要包括以下函数1:空值函数NVL(表达式1,表达式2):此函数的功能完成空值转换,把空值转换为其他值。如果表达式1为空值,则表达式2的值为该函数的值。NVL2(表达式1,表达式2,表达式3):此函数的功能是如果第一个函数不为空,则输出第二个参数,如果第一个函数为空,则输出第三个参数.NULLIF(表达式1,表达式2):此函数主要是完成两个参数的比较,当两个参数不相等时,返回值是第一个参数值,当两个参数相等时,返回值是空值。2:条件处理函数DECODE函数decode(表达式,条件1,值1,[,条件2,值2][,条件n,...值n][,default])它的意思也就是这样Decode用于比较表达式的值,如果和哪一个条件匹配,则取该条件对应的值,如果没有一个条件符合,则返回最后default的值,如果没有提供default值。则返回null.例:查询职员表,根据职员的职位计算奖励金额,当职位分别是”MANAGER”,”ANALYST”,”SALESMAN”时,奖励金额分别是薪水的1.2倍,1.1倍,1.05倍,如果不是这三个职位,则奖励金额取薪水值.Selectename,job,sal,decode(job,’MANAGER’,SAL*1.2,’ANALYST’,SAL*1.1,‘SALESMAN’,SAL*1.05,SAL)奖励金额fromemp;