资源描述:
《Oracle常用函数以及行列转换.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、常用的函数数值函数ØABS(N)返回指定值的绝对值ØCEIL(N)返回大于或等于给出数字的最小整数ØFLOOR(N)对给定的数字取整数ØMOD(M,N)返回一个M除以N的余数ØROUND(M[,N])按照指定的小数位元数进行四舍五入运算的结果参数:如果N不为整数则截取N整数部分,如果N>0则四舍五入为N位小数,如果N小于0则四舍五入到小数点向左第N位。ØTRUNC(M[,N])返回M按精度N截取后的值参数:如果N不为整数则截取N整数部分,如果N>0则截取到N位小数,如果N小于0则截取到小数点向左第N位,
2、小数前其它数据用0表示。转换函数ØTO_CHAR(NUMBER
3、date,'format')ØTO_NUMBER(char,'format')ØTO_DATE(char,'format')分组函数ØMAXØAVGØMINØCOUNTØSUM字段为空的判断NULL的概述NULL在Oracle中是很特殊的值,任何类型的值都可以是NULL。如果在某行中有一列没有值,那么就说慈航中这个列的值是NULL。NULL是未知的东西,常称它为“UNKNOWN”或空值。正因为它是未知的,才会有很多值得注意的规则。NULL可
4、以是任何数据类型的值,也可以不依赖于数据类型单独存在(字面量NULL),任何没有NOTNULL约束或主键约束的列都有可能出现NULL值。NULL和其他任何值都不相等或相等,包括自身(当然是用ISNULL判断是可以的)。但是在某些时候,Oracle却把他们当成相等的(指Oracle的一些内部规则),如SQL集合语句、Groupby分组、Decode函数等。NULL的判断和比较运算规则Oracle中判断一个列值或变量值是否是NULL,必须是用ISNULL或ISNOTNULL,而不能使用=NULL或<>NUL
5、L。NULL的算数或者逻辑运算规则NULL做一些算数运算,比如+、-、*、/等,结果还是NULL,但是对于连接操作符
6、
7、,NULL忽略。selectnull+10fromdual;selectnull
8、
9、'ygczm'fromdual;selectconcat(null,'ygczm')fromdual;NULL与函数Oracle对NULL处理有专门的函数,所以这里只讲述NVL、NVL2、NULLIF、COALESCE、DECODE函数,以及两种CASE表达式对NULL的处理。NVL函数Ø语法:NVL(
10、expr1,expr2)Ø描述:常用语expr1可能是NULL,而我们又不想在查询结果中出现空值的转换需求。如果expr1是NULL,那么用expr2作为返回值,不是NULL则返回expr1。expr1和expr2一般是类型相同的,如果类型不同会采用自动类型转换,如果转换失败则出错。采用的自动类型转换规则如下:ü如果expr1是字符类型,那么在比较前expr2转换为expr1类型,返回值类型是expr1所在的字符集的VARCHAR2类型。ü如果expr1是数值型,Oracle会检查expr1和expr2
11、的数值类型优先级,然后将优先级低的参数类型转换为优先级高的参数类型,最后返回的类型是优先级最高的那个类型。数值类型优先级BINARY_DOUBLE>BINARY_FLOAT>NUMBER。ü如果expr1是字面量NULL,expr2是非NULL。则转为expr2类型,返回值同expr2。NVL2函数Ø语法:NVL(expr1,expr2,expr3)Ø描述:常用于对expr1的值不管是否是NULL都要转换的需求。比NVL要先进一点,加了额外的判断,expr1如果是NULL则返回expr3,否则返回exp
12、r2。这里的类型转换就和expr1没有关系了,一般要求expr2和expr3类型要一致,如果不一致则采用自动类型转换。ü如果expr2是字符类型,在比较前将expr3转换为expr2类型,如果expr3是字面量NULL,则没有必要转换。ü如果expr2是数值类型,Oracle会检查expr2和expr3的数值类型优先级,然后将低优先级的参数类型转换为高优先级的参数类型,最后返回值类型就是高优先级的类型。ü如果expr2是字面值NULL,expr3不是NULL,则返回值同expr3类型。下面的6个例子中哪
13、些是错的呢?selectNVL2(NULL,1,2)fromdual;selectNVL2(NULL,'1',2)fromdual;selectNVL2(NULL,NULL,2)fromdual;selectNVL2(NULL,1,'2')fromdual;selectNVL2(NULL,1,'a')fromdual;selectNVL2(NULL,'a',1)fromdual;NULLIF函数Ø语法:NULLIF(expr1,expr2)