SQL数学函数学习
笔记来自如鹏网杨中科老师所著的 《程序员的SQL金典》
#创建数据库表 CREATE Table T_Person ( FIdNumber VARCHAR(20), FName varchar(20), FBirthDay DateTime, FRegDay DateTime, FWeight DECIMAL(10,2) ) #插入数据 insert into T_Person(FidNumber,FName,FBirthDay,FRegDay,FWeight) VALUES('123456789120','Tom','1981-03-22','1998-05-01',56.67); insert into T_Person(FidNumber,FName,FBirthDay,FRegDay,FWeight) VALUES('123456789121','Jim','1987-01-18','1999-08-21',36.17); insert into T_Person(FidNumber,FName,FBirthDay,FRegDay,FWeight) VALUES('123456789122','Lily','1987-11-08','2001-09-18',40.33); insert into T_Person(FidNumber,FName,FBirthDay,FRegDay,FWeight) VALUES('123456789123','Kelly','1982-07-12','2000-03-01',46.23); insert into T_Person(FidNumber,FName,FBirthDay,FRegDay,FWeight) VALUES('123456789124','Sam','1983-02-16','1998-05-01',48.68); insert into T_Person(FidNumber,FName,FBirthDay,FRegDay,FWeight) VALUES('123456789125','Kerry','1984-08-07','1999-03-01',66.67); insert into T_Person(FidNumber,FName,FBirthDay,FRegDay,FWeight) VALUES('123456789126','Smith','1980-01-09','2002-09-23',51.28); insert into T_Person(FidNumber,FName,FBirthDay,FRegDay,FWeight) VALUES('123456789127','BillGates','1972-07-18','1995-06-19',60.32); #1、求绝对值: MySQL 、 MSSQL Server 都适合 #ABS(X)函数,该函数接受一个参数。 select FWeight-50,ABS(FWeight-50),ABS(-5.38) FROM T_Person #2、求指数: MySQL 、 MSSQL Server 都适合 #POWER(X,Y)函数,该函数接受两个参数。 第一个参数为待求幂的表达式,第二个参数为幂。 select FWeight ,Power(FWeight,-0.5),POWER(FWeight,2),POWER(FWeight,3),POWER(FWeight,4) from T_Person #3、求平方根: MySQL 、 MSSQL Server 都适合 #SQRT(X) 函数。该函数接受一个参数。这个参数为待计算平方根的表达式。 select FWeight,SQRT(FWeight) from T_Person #4、求随机数 #MySQL 中 Rand() 函数 select Rand() #MSSQL Server 中 Rand()函数。和MySQL使用方法一样。但是还提供了一个参数 Rand(X) 这个参数为随机数种子。 select Rand(2017) #5、舍入到最大整数 ---- 取天花板数。 这个函数用来舍掉一个数的小数点后的部分,并且向上舍入到邻近的最大的整数。比如 3.33 将被舍入为 4 #MySQL 中 CEIL(X) 、 CEILING(X) 都可以 select FWeight,CEIL(FWeight) FROM T_Person select FWeight,CEILING(FWeight) from T_Person #MSSQL Server 中只支持 CEILING(X) select FWeight,CEILING(FWeight) from T_Person #6、舍入到最小整数 ---- 取地板数。 这个函数用来舍掉一个数的小数点后的部分,并且向下舍入到邻近的最小的整数。比如 3.33 将被舍入为 3 #MySQL 、 MSSQL Server 中 FLOOR(X)函数。 select FWeight,FLOOR(FWeight) from T_Person
#7、四舍五入 ---- ROUND()函数将数值向最近的数值舍入。在英语中 ROUND 可以理解为“半径” ,舍入到“离我半径最近的数”当然也就是四舍五入了。 #ROUND(X) ROUND(X,D)函数 该函数可接受一个 参数的,也可接受两个参数的。 #1)、两个参数的ROUND(X,D)函数 。 X为待进行四舍五入的数值,而D为计算精度, 也就是进行四舍五入时保留的小数位数。 当 D 为 0 的时候则表示不保留小数位进行四舍五入。比如 3.663 进行精度为2的四舍五入得到 3.66。 当 D 为 0 的时候则表示不保留小数位进行四舍五入。比如 3.663 进行精度为 0 的四舍五入得到 4 注意:D也可以为负数。这时表示在整数部分进行四舍五入 比如 233.7 进行精度为-2 的四舍五入得到 200。 36.63 进行精度为-1 的四舍五入得到 40。 select FName , FWeight ,ROUND(FWeight,1),ROUND(FWeight*-1,0),ROUND(FWeight,-1) from T_Person #2)、单一参数的ROUND(X)函数。 X 为待进行四舍五入的数值,它可以看做精度为 0 的四舍五入运算, 也就是 ROUND(m,0) 比如 3.663 进行四舍五入得到 4 select FName,FWeight,ROUND(FWeight),ROUND(FWeight*-1) FROM T_Person #8)、求正弦值: #SIN(X) 该函数接受一个参数。 select FName,FWeight, SIN(FWeight) from T_Person #9)、求余弦值: #COS(X) 该函数接受一个参数。 select FName ,FWeight,COS(FWeight) from T_Person #10)、求反正弦值: #ASIN(X) 该函数接受一个参数。 select FName ,FWeight ,ASIN(1/FWeight) FROM T_Person #11)、求反余弦值: #ACOS(X) 该函数接受一个参数。 SELECT FName ,FWeight ,ACOS(1/FWeight) FROM T_Person #12)、求正切值: #TAN(X) 该函数接受一个参数。 select FName ,FWeight ,TAN(FWeight) from T_Person #13)、求反正切值: #MySQL 中支持 ATAN(X) ATAN(X,Y) ATAN2(X,Y) 。后两个的计算结果一样。 #ATAN2(X,Y),函数返回 2 个变量 X 和 Y 的反正切 select FName ,FWeight ,ATAN(FWeight) from T_Person select FName ,FWeight ,ATAN(FWeight,2) from T_Person select FName ,FWeight ,ATAN2(FWeight,2) from T_Person #MSSQL Server 中 支持 ATAN(X) ATN2(X,Y) select FName ,FWeight ,ATAN(FWeight) from T_Person select FName ,FWeight ,ATN2(FWeight,2) from T_Person #14)、求余切: #COT(X) 该函数接受一个参数。 select FName ,FWeight ,COT(FWeight) from T_Person #15)、求圆周率π值: #PI() 该函数不接受参数。 select FName ,FWeight ,FWeight*PI() from T_Person #16)、 弧度制转换为角度制: #DEGREES(X) 该函数接受一个参数。 角度制=弧度制*180/π select FName ,FWeight ,DEGREES(FWeight) from T_Person select FName ,FWeight ,(FWeight*180)/ACOS(-1) from T_Person #17)、角度制转换为弧度制: #RADIANS(X) 该函数接受一个参数。 弧度制=角度制*π/180 select FName ,FWeight ,RADIANS(FWeight) from T_Person select FName ,FWeight ,(FWeight*ACOS(-1))/180 from T_Person #18)、求符号: #SIGN(X) 该函数接受一个参数。 如果数值大于 0 则返回 1,如果数值等于 0 则返回 0,如果数值小于 0 则返回-1。 select FName ,FWeight-48.68 ,SIGN(FWeight-48.68) FROM T_Person #19)、求整除余数: #MySQL中提供了MOD()函数 :用来计算两个数整除后的余数。第一个参数为除数,第二个参数为被除数。 select FName,FWeight,MOD(FWeight , 5) FROM T_Person #MSSQL Server不支持MOD()。 不过直接支持操作符 "%" 用来计算两个数的整数余数。 select FName ,FWeight , FWeight%5 from T_Person #20)、求自然对数: #MySQL中: #LOG(X) 该函数接受一个参数。 也接受两个数的参数。 #LOG(B,X) B为自己输入的整数。 X为待求的参数。 #MySQL支持以2为底、以10为底的,以任意自己输入的为底的对数。 select FName ,FWeight ,LOG(FWeight) from T_Person select FName ,FWeight ,LOG2(FWeight) from T_Person select FName ,FWeight ,LOG10(FWeight) from T_Person select FName ,FWeight ,LOG(2,FWeight) from T_Person #MSSQL Server中: #只支持LOG(X) 、LOG10(X) 为底的对数。 select FName ,FWeight ,LOG(FWeight) from T_Person select FName ,FWeight ,LOG10(FWeight) from T_Person #21)、求幂: #POWER(X,Y) 该函数接受两个参数 。X 为次幂 Y 为待求幂的字段 #MySQL 中 select FName , FWeight , POWER(2,FWeight) from T_Person select FName , FWeight , POW(2,FWeight) from T_Person #MSSQL Server 中支持 POWER(X,Y) select FName , FWeight , POWER(2,FWeight) from T_Person