首先创建需要用到的数据表:
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);
一、求绝对值 ABS()
该函数接受一个参数,这个参数为待求绝对值的表达式:
SELECT FWeight – 50,ABS(FWeight – 50) , ABS(-5.38) FROM T_Person
二、求指数 POWER()
该函数接受两个参数,第一个参数为待求幂的表达式,第二个参数为幂:
SELECT FWeight,POWER(FWeight,-0.5),POWER(FWeight,2),
POWER(FWeight,3),POWER(FWeight,4) FROM T_Person
三、求平方根 SQRT()
该函数接受一个参数,这个参数为待计算平方根的表达式:
SELECT FWeight,SQRT(FWeight) FROM T_Person
四、求随机数 RAND()
MYSQL、MSSQLServer 中提供了 RAND() 函数用来生成随机算法:
SELECT RAND()
RAND() 函数还支持一个参数,这个参数为随机数种子,如:
SELECT RAND(9527)
五、舍入到最大整数 CEILING()
在 MYSQL、MSSQLServer 和 DB2 中提供了名为 CEILING() 的函数(在英语中 CEILING 可以理解为 “天花板”),
这个函数用来舍掉一个数的小数点后的部分,并且向上舍入到邻近的最大的整数(即:向上取整)。
如 3.33 将被舍入为 4、
2.89 将被舍入为 3、
-3.61 将被舍入为-3。
这个函数有一个参数,参数为待舍入的数值:
SELECT FName,FWeight, CEILING(FWeight), CEILING(FWeight*-1)
FROM T_Person
六、舍入到最小整数 FLOOR()
SQL 中提供了 FLOOR() 函数,和 CEILING() 函数正好相反(在英语中FLOOR 可以理解为“地板”),
FLOOR()函数用来舍掉一个数的小数点后的部分,并且向下舍入到邻近的最小的整数(即:向下取整)。
如 3.33 被舍入为 3、
2.89 被舍入为 2、
-3.61 将被舍入为 -4。
这个函数有一个参数,参数为待舍入的数值:
SELECT FName,FWeight,FLOOR(FWeight),FLOOR(FWeight*-1)
FROM T_Person
七、四舍五入 ROUND()
ROUND() 函数用来进行数值四舍五入,ROUND() 函数将数值向最近的数值舍入(在英语中ROUND可以理解为“半径”),
ROUND()函数有两个参数和单一参数两种用法。
1、两个参数
两个参数的 ROUND() 函数用法为:ROUND(m,d),
其中m为待进行四舍五入的数值,d 为计算精度,也就是进行四舍五入时保留的小数位数,如:
3.663 进行精度为2 的四舍五入得到3.66、
-2.337 进行精度为2 的四舍五入得到-2.34、
3.32122进行精度为3 的四舍五入得到3.321。
当d为0 的时候则表示不保留小数位进行四舍五入,如:
3.663进行精度为 0 的四舍五入得到 4、
-2.337进行精度为 0 的四舍五入得到 -2、
3.32122进行精度为 0 的四舍五入得到 3。
d 还可以取负值,这时表示在整数部分进行四舍五入,如:
36.63 进行精度为 -1 的四舍五入得到 40、
233.7 进行精度为 -2 的四舍五入得到 200、
3321.22 进行精度为 -2的四舍五入得到 3300。
SQL语句如下:
SELECT FName,FWeight, ROUND(FWeight,1),
ROUND(FWeight*-1,0) , ROUND(FWeight,-1)
FROM T_Person;
2、单一参数
单一参数的 ROUND() 函数用法为:ROUND(m),其中 m 为待进行四舍五入的数值,
可以看做精度为 0 的四舍五入运算,即 ROUND(m,0)。
SELECT FName,FWeight, ROUND(FWeight), ROUND(FWeight*-1)
FROM T_Person
注:单一函数的用法在 MSSQLServer 上以及 DB2 上不被支持,必须显示的指明精度为 0。
八、求正弦值 SIN()
接受一个参数,这个参数为待计算正弦值的表达式:
SELECT FName,FWeight,SIN(FWeight) FROM T_Person
九、求余弦值 COS()
接受一个参数,这个参数为待计算余弦值的表达式:
SELECT FName,FWeight, COS(FWeight) FROM T_Person
十、求反正弦值 ASIN()
接受一个参数,这个参数为待计算反正弦值的表达式:
SELECT FName,FWeight, ASIN(1/FWeight) FROM T_Person
十一、求反余弦值 ACOS()
接受一个参数,这个参数为待计算反余弦值的表达式:
SELECT FName,FWeight, ACOS(1/FWeight) FROM T_Person
十二、求正切值 TAN()
接受一个参数,这个参数为待计算正切值的表达式:
SELECT FName,FWeight, TAN(FWeight) FROM T_Person
十三、求反正切值 ATAN()
接受一个参数,这个参数为待计算反正切值的表达式:
SELECT FName,FWeight, ATAN(FWeight) FROM T_Person
十四、求余切 COT()
接受一个参数,这个参数为待计算余切值的表达式:
SELECT FName,FWeight, COT(FWeight) FROM T_Person
十五、求圆周率π值 PI()
这个函数不需要使用参数:
SELECT FName,FWeight,FWeight *PI() FROM T_Person
十六、弧度制转换为角度制 DEGREES ()
接受一个参数,这个参数为待转换的表达式:
SELECT FName,FWeight, DEGREES(FWeight) FROM T_Person
十七、角度制转换为弧度制 RADIANS ()
接受一个参数,这个参数为待转换的表达式:
SELECT FName,FWeight, RADIANS(FWeight) FROM T_Person
十八、求符号 SIGN()
如果数值大于 0 则返回 1,
如果数值等于 0 则返回 0,
如果数值小于 0 则返回-1。
该函数接受一个参数,这个参数为待求绝对值的表达式:
SELECT FName,FWeight-48.68,SIGN(FWeight-48.68) FROM T_Person
十九、求整除余数 MOD()
该函数接受两个参数,第一个参数为除数,而第二个参数则是被除数。
MYSQL 和 Oracle 中提供了对 MOD() 函数的直接支持;
MSSQLServer 不支持 MOD(),当提供了操作符 “%” 用来计算两个数的整除余数;
DB2中不支持求整除余数操作。
MYSQL,Oracle:
SELECT FName,FWeight,MOD(FWeight , 5) FROM T_Person
MSSQLServer:
SELECT FName,FWeight,FWeight % 5 FROM T_Person
二十、求自然对数 LOG ()
该函数接受一个参数,此参数为待计算自然对数的表达式,在Oracle中这个函数的名称为 LN()。
MYSQL,MSSQLServer,DB2:
SELECT FName,FWeight, LOG(FWeight) FROM T_Person
Oracle:
SELECT FName,FWeight, LN(FWeight) FROM T_Person
二十一、求以 10 为底的对数 LOG10()
该函数接受一个参数,此参数为待计算对数的表达式。
Oracle 不支持这个函数,但 Oracle 有一个可以计算任意数为底的对数的函数 LOG(m,n) 用来计算以 m 为底 n 的对数。
MYSQL,MSSQLServer,DB2:
SELECT FName,FWeight, LOG10(FWeight) FROM T_Person
Oracle:
SELECT FName,FWeight,LOG(10,FWeight) FROM T_Person
二十二、求幂 POWER(X,Y)
用来计算X 的Y 次幂:
SELECT FName,FWeight, POWER(1.18,FWeight) FROM T_Person