Sql函数

SQL分为单行函数和多行函数。

单行函数的特征:1.对单行操作 2.每行返回一个结果 3.有可能返回类型与原参数类型不一致 4.单行函数可写在SELECT,FORM,WHERE,ORDER BY子句中 5.有些函数没有参数有些函数有参数,可以嵌套。

单行函数分类如下:

INITCAP(列名/表达式)函数是将每个单词首字母转为大写其余字母小写

LOWER(列名/表达式) WHERE ename=LOWER('JPB')    同理 UPPER是转为大写

CONCAT:同 ‘’||‘’ 用来连接两个值 SELECT ename || eno FROM emp   同 SELECT concat(ename,eno) FROM emp

SUBSTR(colum/expression,n1,n2 ):从n1位置截取长度为n2的子串。 I.若n2不写,则从n1位置开始截取所有的子串。II.若n1为负数则从右向左数abs(n1)的位置开始向右截取n2长度

LENGTH(colum/expression):取字符串长度。

例:用首字母大写,其他字母小写显示雇员的名字和长度,名字以A,J,M开头的

select initcap(ename),length(ename) from emp where substr(ename,1,1) in ('A','J','M')  

instr('String','r'),结果为3.即返回子串r在String中第一次出现的位置

lpad(sal,10,'*'):结果为******5000,即从左边开始填充*,填充完后总长度为10.

rpad 同上

replace('abc','b','d'):结果为adc,即把abc中的子串b用d来替换掉。

trim('s' from 'ssdbcs'):结果为dbc,即去除头部和尾部中与s子串相同的部分,注意这里的头部其实执行了两次,把前面的ss都去掉了。

例:查询名字包含‘a'的员工姓名,不区分大小写

select ename from emp where instr(upper(ename),'A')>0  若不包含则inser=0    或       select ename from emp where upper(ename) like ('%A%')

单行函数之数值函数

round(123.426,2),结果为123.43,以四色五入的方式保留小数点后两位。

trunc(123.426,2),结果为123.42,截取小数点后两位。 trunc默认为截取整数,若第二个参数为负数,例trunc('123.426',-1)结果为120

mod(9,2),结果为1,即取余数

日期函数

Oracle中默认的日期格式是DD-MM-RR     对于RR格式,是否设置的是上个世纪,其实数据库很智能的,它会自动判断是本世纪还是上个世纪。

日期可与数字进行加减运算,如'10-AUG-18'+15结果是‘25-AUG-18’

日期与日期进行加减运算,如'10-AUG-18' - '4-AUG-18'结果是四舍五入后的6天。

SYSDATE:返回系统当前时间,例 (SYSDATE-hiredate)/7  可以得到星期数

常用的日期函数

MONTHS_BETWEEN(SYSDATE,hiredate)注意这里是SYSDATE-hiredate,顺序是前者减去后者的月数

ADD_MONTHS(hiredate,3),代表着实习三个月后转正,即入职月数加3

 NEXT_DAy('02-2月-18',‘星期一’)返回18年2月2日之后的第一个星期一,亦可以是第一个周日。

LAST_DAY(‘02-2月-18’)返回当前月的最后一天  SELECT LAST_DAY(‘02-2月-18’) FROM DUAL(伪表)

ROUND(hiredate,'MONTH')按照月份进行四舍五入操作如图中对日期进行的操作。

TRUNC(hiredate,'MONTH')这里的月数没有进行四舍五入。

 

EXTRACT(month from hiredate)把月份截取出来。

转换函数

转换函数分为显示转换和隐式转换,这里我只写显示转换,隐式转换需按照Oracle规则

显示转换通常在,日期、数值、字符之间相互转换。

转换规则如图所示

TO_CHAR用于日期型

TO_CHAR(date,'fmt'):TO_CHAR(hiredate,‘MM/YY’)注意:日期格式模型必须用单引号括起来且对大小敏感,可以包含任何有效的日期元素,使用逗号将日期与日期模型分开

       TO_CHAR(SYSDATE,'DD/MM/YY HH24/MI/SS')可以求出当前时间的日期和时分秒。

TO_CHAR用于数值型

TO_CHAR(sal,'$99,999') 逗号代表显示千位符,结果是$3,000

TO_NUMBER('$123,234,345','$999,999,999') 注意要转化成number型的char必须是由数字组成的。

TO_DATE('2018-07-28 16/16','YYYY-MM-DD HH24/MI')注CHAR类型的数据必须是可以转为日期格式的数据。

通用函数

NVL(exp1,exp2):若exp1为null则返回exp2否则返回exp1。

NVL2(exp1,exp2,exp3)若exp1不是null,返回exp2否则返回exp3(有点像三目运算符)。

NULLIF(exp1,exp2)比较两个表达式,若想等返回NULL否则返回第一个

COALESCE(表达式1,表达式2·······)返回第一个不是null的参数

CASE和DECODE函数

将满足条件的部门改为指定名称:

        

 

posted @ 2018-07-28 16:38  悄悄地超越  阅读(459)  评论(0编辑  收藏  举报