数学函数
这些标量函数通常对作为参数提供的输入值执行计算,并返回一个数字值。
ABS | DEGREES | RAND |
ACOS | EXP | ROUND |
ASIN | FLOOR | SIGN |
ATAN | LOG | SIN |
ATN2 | LOG10 | SQUARE |
CEILING | PI | SQRT |
COS | POWER | TAN |
COT | RADIANS |
|
说明 算术函数(例如 ABS、CEILING、DEGREES、FLOOR、POWER、RADIANS 和 SIGN)返回与输入值相同数据类型的值。三角函数和其它函数(包括 EXP、LOG、LOG10、SQUARE 和 SQRT)将输入值投影到 float 并返回 float 值。
除了 RAND 外,所有数学函数都是确定性函数。每次用一组特定输入值调用它们时,所返回的结果相同。仅当指定种子参数时,RAND 才具有确定性。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
1ABS
返回给定数字表达式的绝对值。
语法
ABS ( numeric_expression )
参数
numeric_expression
精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。
返回类型
返回与 numeric_expression 相同的类型。
示例
下例显示了 ABS 函数对三个不同数字的效果。
SELECT ABS(-1.0), ABS(0.0), ABS(1.0)
下面是结果集:
---- ---- ----
1.0 .0 1.0
ABS 函数可能产生溢出错误,例如:
SELECT ABS(convert(int, -2147483648))
下面是错误信息:
Server: Msg 8115, Level 16, State 2
Arithmetic overflow error converting expression to type int.
2ACOS
返回以弧度表示的角度值,该角度值的余弦为给定的 float 表达式;本函数亦称反余弦。
语法
ACOS ( float_expression )
参数
float_expression
是 float 或 real 类型的表达式,其取值范围从 -1 到 1。对超过此范围的参数值,函数将返回 NULL 并且报告域错误。
返回类型
float
示例
下例返回给定角的 ACOS 值。
SET NOCOUNT OFF
DECLARE @angle float
SET @angle = -1
SELECT 'The ACOS of the angle is: ' + CONVERT(varchar, ACOS(@angle))
下面是结果集:
---------------------------------
The ACOS of the angle is: 3.14159
(1 row(s) affected)
下例将参数 @angle 设置为超出有效范围的值。
SET NOCOUNT OFF
DECLARE @angle float
SET @angle = 1.01
SELECT 'The ACOS of the angle is: ' + CONVERT(varchar, ACOS(@angle))
下面是结果集:
--------------------------------------------------------
NULL
(1 row(s) affected)
A domain error occurred.
3ASIN
返回以弧度表示的角度值,该角度值的正弦为给定的 float 表达式;亦称反正弦。
语法
ASIN ( float_expression )
参数
float_expression
是 float 类型的表达式,其取值范围从 -1 到 1。对超过此范围的参数值,函数将返回 NULL 并且报告域错误。
返回类型
float
示例
下例用 float 表达式返回给定角的 ASIN 值。
-- First value will be -1.01, which fails.
DECLARE @angle float
SET @angle = -1.01
SELECT 'The ASIN of the angle is: ' + CONVERT(varchar, ASIN(@angle))
GO
-- Next value is -1.00.
DECLARE @angle float
SET @angle = -1.00
SELECT 'The ASIN of the angle is: ' + CONVERT(varchar, ASIN(@angle))
GO
-- Next value is 0.1472738.
DECLARE @angle float
SET @angle = 0.1472738
SELECT 'The ASIN of the angle is: ' + CONVERT(varchar, ASIN(@angle))
GO
下面是结果集:
-------------------------
The ASIN of the angle is:
(1 row(s) affected)
Domain error occurred.
---------------------------------
The ASIN of the angle is: -1.5708
(1 row(s) affected)
----------------------------------
The ASIN of the angle is: 0.147811
(1 row(s) affected)
4ATAN
返回以弧度表示的角度值,该角度值的正切为给定的 float 表达式;亦称反正切。
语法
ATAN ( float_expression )
参数
float_expression
是 float 类型的表达式。
返回类型
float
示例
下例用 float 表达式返回给定角的 ATAN 值。
SELECT 'The ATAN of -45.01 is: ' + CONVERT(varchar, ATAN(-45.01))
SELECT 'The ATAN of -181.01 is: ' + CONVERT(varchar, ATAN(-181.01))
SELECT 'The ATAN of 0 is: ' + CONVERT(varchar, ATAN(0))
SELECT 'The ATAN of 0.1472738 is: ' + CONVERT(varchar, ATAN(0.1472738))
SELECT 'The ATAN of 197.1099392 is: ' + CONVERT(varchar, ATAN(197.1099392))
GO
下面是结果集:
-------------------------------
The ATAN of -45.01 is: -1.54858
(1 row(s) affected)
--------------------------------
The ATAN of -181.01 is: -1.56527
(1 row(s) affected)
--------------------------------
The ATAN of 0 is: 0
(1 row(s) affected)
----------------------------------
The ATAN of 0.1472738 is: 0.146223
(1 row(s) affected)
-----------------------------------
The ATAN of 197.1099392 is: 1.56572
(1 row(s) affected)
5ATN2
返回以弧度表示的角度值,该角度值的正切介于两个给定的 float 表达式之间;亦称反正切。
语法
ATN2 ( float_expression , float_expression )
参数
float_expression
float 数据类型的表达式。
返回类型
float
示例
下例计算给定角的 ATN2。
DECLARE @angle1 float
DECLARE @angle2 float
SET @angle1 = 35.175643
SET @angle2 = 129.44
SELECT 'The ATN2 of the angle is: ' + CONVERT(varchar,ATN2(@angle1,@angle2 ))
GO
下面是结果集:
The ATN2 of the angle is: 0.265345
(1 row(s) affected)
6CEILING
返回大于或等于所给数字表达式的最小整数。
语法
CEILING ( numeric_expression )
参数
numeric_expression
是精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。
返回类型
返回与 numeric_expression 相同的类型。
示例
下面的示例显示使用 CEILING 函数的正数、负数和零值。
SELECT CEILING($123.45), CEILING($-123.45), CEILING($0.0)
GO
下面是结果集:
--------- --------- -------------------------
124.00 -123.00 0.00
(1 row(s) affected)
7COS
一个数学函数,返回给定表达式中给定角度(以弧度为单位)的三角余弦值。
语法
COS ( float_expression )
参数
float_expression
是 float 类型的 expression。
返回类型
float
示例
下面的示例返回给定角度的 COS 值。
DECLARE @angle float
SET @angle = 14.78
SELECT 'The COS of the angle is: ' + CONVERT(varchar,COS(@angle))
GO
下面是结果集:
The COS of the angle is: -0.599465
(1 row(s) affected)
8COT
一个数学函数,返回给定 float 表达式中指定角度(以弧度为单位)的三角余切值。
语法
COT ( float_expression )
参数
float_expression
是 float 类型的 expression。
返回类型
float
示例
下面的示例返回给定角度的 COT 值。
DECLARE @angle float
SET @angle = 124.1332
SELECT 'The COT of the angle is: ' + CONVERT(varchar,COT(@angle))
GO
下面是结果集:
The COT of the angle is: -0.040312
(1 row(s) affected)
9DEGREES
当给出以弧度为单位的角度时,返回相应的以度数为单位的角度。
语法
DEGREES ( numeric_expression )
参数
numeric_expression
精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。
返回代码值
返回与 numeric_expression 相同的类型。
示例
下例以 PI/2 弧度的角度返回度数。
SELECT 'The number of degrees in PI/2 radians is: ' +
CONVERT(varchar, DEGREES((PI()/2)))
GO
下面是结果集:
The number of degrees in PI/2 radians is 90
(1 row(s) affected)
10EXP
返回所给的 float 表达式的指数值。
语法
EXP ( float_expression )
参数
float_expression
是 float 类型的表达式。
返回类型
float
示例
本示例声明一个变量,同时返回所给变量 (378.615345498) 的指数值,并附有文字说明。
DECLARE @var float
SET @var = 378.615345498
SELECT 'The EXP of the variable is: ' + CONVERT(varchar,EXP(@var))
GO
下面是结果集:
The EXP of the variable is: 2.69498e+164
(1 row(s) affected)
11FLOOR
返回小于或等于所给数字表达式的最大整数。
语法
FLOOR ( numeric_expression )
参数
numeric_expression
精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。
返回类型
返回与 numeric_expression 相同的类型。
示例
此示例说明正数、负数和货币值在 FLOOR 函数中的运用。
SELECT FLOOR(123.45), FLOOR(-123.45), FLOOR($123.45)
结果为与 numeric_expression 数据类型相同的计算值的整数部分。
--------- --------- -----------
123 -124 123.0000
12LOG
返回给定 float 表达式的自然对数。
语法
LOG ( float_expression )
参数
float_expression
是 float 数据类型的表达式。
返回类型
float
示例
下例计算给定 float 表达式的 LOG。
DECLARE @var float
SET @var = 5.175643
SELECT 'The LOG of the variable is: ' + CONVERT(varchar,LOG(@var))
GO
下面是结果集:
The LOG of the variable is: 1.64396
(1 row(s) affected)
13LOG10
返回给定 float 表达式的以 10 为底的对数。
语法
LOG10 ( float_expression )
参数
float_expression
是 float 数据类型的表达式。
返回类型
float
示例
下例计算给定变量的 LOG10。
DECLARE @var float
SET @var = 145.175643
SELECT 'The LOG10 of the variable is: ' + CONVERT(varchar,LOG10(@var))
GO
下面是结果集:
The LOG10 of the variable is: 2.16189
(1 row(s) affected)
14PI
返回 PI 的常量值。
语法
PI ( )
返回类型
float
示例
本示例返回 PI 值。
SELECT PI()
GO
下面是结果集:
------------------------
3.14159265358979
(1 row(s) affected)
15POWER
返回给定表达式乘指定次方的值。
语法
POWER ( numeric_expression , y )
参数
numeric_expression
是精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。
y
numeric_expression 的次方。y 可以是精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。
返回类型
与 numeric_expression 相同。
示例
A. 使用 POWER 显示结果 0.0
本示例显示返回结果 0.0 的浮点下溢。
SELECT POWER(2.0, -100.0)
GO
下面是结果集:
------------------------------------------
0.0
(1 row(s) affected)
B. 使用 POWER
本示例显示 21 到 24 的 POWER 结果。
DECLARE @value int, @counter int
SET @value = 2
SET @counter = 1
WHILE @counter < 5
BEGIN
SELECT POWER(@value, @counter)
SET NOCOUNT ON
SET @counter = @counter + 1
SET NOCOUNT OFF
END
GO
下面是结果集:
-----------
2
(1 row(s) affected)
-----------
4
(1 row(s) affected)
-----------
8
(1 row(s) affected)
-----------
16
(1 row(s) affected)
16RADIANS
对于在数字表达式中输入的度数值返回弧度值。
语法
RADIANS ( numeric_expression )
参数
numeric_expression
精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。
返回类型
返回与 numeric_expression 相同的类型。
示例
A. 使用 RADIANS 显示 0.0
下例返回结果 0.0,因为用于转换为弧度的数字表达式对于 RADIANS 函数太小。
SELECT RADIANS(1e-307)
GO
下面是结果集:
-------------------
0.0
(1 row(s) affected)
B. 使用 RADIANS
下例使用 float 表达式并返回给定角度的弧度 (RADIANS)。
-- First value is -45.01.
DECLARE @angle float
SET @angle = -45.01
SELECT 'The RADIANS of the angle is: ' +
CONVERT(varchar, RADIANS(@angle))
GO
-- Next value is -181.01.
DECLARE @angle float
SET @angle = -181.01
SELECT 'The RADIANS of the angle is: ' +
CONVERT(varchar, RADIANS(@angle))
GO
-- Next value is 0.00.
DECLARE @angle float
SET @angle = 0.00
SELECT 'The RADIANS of the angle is: ' +
CONVERT(varchar, RADIANS(@angle))
GO
-- Next value is 0.1472738.
DECLARE @angle float
SET @angle = 0.1472738
SELECT 'The RADIANS of the angle is: ' +
CONVERT(varchar, RADIANS(@angle))
GO
-- Last value is 197.1099392.
DECLARE @angle float
SET @angle = 197.1099392
SELECT 'The RADIANS of the angle is: ' +
CONVERT(varchar, RADIANS(@angle))
GO
下面是结果集:
---------------------------------------
The RADIANS of the angle is: -0.785573
(1 row(s) affected)
---------------------------------------
The RADIANS of the angle is: -3.15922
(1 row(s) affected)
---------------------------------------
The RADIANS of the angle is: 0
(1 row(s) affected)
---------------------------------------
The RADIANS of the angle is: 0.00257041
(1 row(s) affected)
---------------------------------------
The RADIANS of the angle is: 3.44022
(1 row(s) affected)
17RAND
返回 0 到1 之间的随机float 值。
语法
RAND ( [ seed ] )
参数
seed
是给出种子值或起始值的整型表达式(tinyint、smallint 或 int)。
返回类型
float
注释
在单个查询中反复调用 RAND() 将产生相同的值。
示例
下例产生 4 个通过 RAND 函数产生的不同的随机值。
DECLARE @counter smallint
SET @counter = 1
WHILE @counter < 5
BEGIN
SELECT RAND(@counter) Random_Number
SET NOCOUNT ON
SET @counter = @counter + 1
SET NOCOUNT OFF
END
GO
下面是结果集:
Random_Number
-------------------
0.71359199321292355
(1 row(s) affected)
Random_Number
-------------------
0.7136106261841817
(1 row(s) affected)
Random_Number
-------------------
0.71362925915543995
(1 row(s) affected)
Random_Number
-------------------
0.7136478921266981
(1 row(s) affected)
18ROUND
返回数字表达式并四舍五入为指定的长度或精度。
语法
ROUND ( numeric_expression , length [ , function ] )
参数
numeric_expression
精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。
length
是 numeric_expression 将要四舍五入的精度。length 必须是 tinyint、smallint 或int。当 length 为正数时,numeric_expression 四舍五入为 length 所指定的小数位数。当 length 为负数时,numeric_expression 则按 length 所指定的在小数点的左边四舍五入。
function
是要执行的操作类型。function 必须是 tinyint、smallint 或 int。如果省略 function 或 function 的值为 0(默认),numeric_expression 将四舍五入。当指定 0 以外的值时,将截断 numeric_expression。
返回类型
返回与 numeric_expression 相同的类型。
注释
ROUND 始终返回一个值。如果 length 是负数且大于小数点前的数字个数,ROUND 将返回 0。
示例 | 结果 |
ROUND(748.58, -4) | 0 |
当 length 是负数时,无论什么数据类型,ROUND 都将返回一个四舍五入的 numeric_expression。
示例 | 结果 |
ROUND(748.58, -1) | 750.00 |
ROUND(748.58, -2) | 700.00 |
ROUND(748.58, -3) | 1000.00 |
示例
A. 使用 ROUND 和估计值
下例显示两个表达式,说明使用 ROUND 函数且最后一个数字始终是估计值。
SELECT ROUND(123.9994, 3), ROUND(123.9995, 3)
GO
下面是结果集:
----------- -----------
123.9990 124.0000
B. 使用 ROUND 和四舍五入的近似值
下例显示四舍五入和近似值。
语句 | 结果 |
SELECT ROUND(123.4545, 2) | 123.4500 |
SELECT ROUND(123.45, -2) | 100.00 |
C. 使用 ROUND 截断
下例使用两个 SELECT 语句说明四舍五入和截断之间的区别。第一个语句四舍五入结果。第二个语句截断结果。
语句 | 结果 |
SELECT ROUND(150.75, 0) | 151.00 |
SELECT ROUND(150.75, 0, 1) | 150.00 |
19SIGN
返回给定表达式的正 (+1)、零 (0) 或负 (-1) 号。
语法
SIGN ( numeric_expression )
参数
numeric_expression
精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。
返回类型
float
示例
下例返回从 -1 到 1 的 SIGN 数值。
DECLARE @value real
SET @value = -1
WHILE @value < 2
BEGIN
SELECT SIGN(@value)
SET NOCOUNT ON
SELECT @value = @value + 1
SET NOCOUNT OFF
END
SET NOCOUNT OFF
GO
下面是结果集:
(1 row(s) affected)
------------------------
-1.0
(1 row(s) affected)
------------------------
0.0
(1 row(s) affected)
------------------------
1.0
(1 row(s) affected)
20SIN
以近似数字 (float) 表达式返回给定角度(以弧度为单位)的三角正弦值。
语法
SIN ( float_expression )
参数
float_expression
是 float 类型的表达式。
返回类型
float
示例
下例计算给定角度的 SIN 值。
DECLARE @angle float
SET @angle = 45.175643
SELECT 'The SIN of the angle is: ' + CONVERT(varchar,SIN(@angle))
GO
下面是结果集:
The SIN of the angle is: 0.929607
(1 row(s) affected)
21SQUARE
返回给定表达式的平方。
语法
SQUARE ( float_expression )
参数
float_expression
是 float 类型的表达式。
返回类型
float
示例
下例返回半径为 1 英寸、高为 5 英寸的圆柱容积。
DECLARE @h float, @r float
SET @h = 5
SET @r = 1
SELECT PI()* SQUARE(@r)* @h AS 'Cyl Vol'
下面是结果:
Cyl Vol
--------------------------
15.707963267948966
22SQRT
返回给定表达式的平方根。
语法
SQRT ( float_expression )
参数
float_expression
是 float 类型的表达式。
返回类型
float
示例
下例返回 1.00 到 10.00 之间的数字的平方根。
DECLARE @myvalue float
SET @myvalue = 1.00
WHILE @myvalue < 10.00
BEGIN
SELECT SQRT(@myvalue)
SELECT @myvalue = @myvalue + 1
END
GO
下面是结果集:
------------------------
1.0
------------------------
1.4142135623731
------------------------
1.73205080756888
------------------------
2.0
------------------------
2.23606797749979
------------------------
2.44948974278318
------------------------
2.64575131106459
------------------------
2.82842712474619
------------------------
3.0
23TAN
返回输入表达式的正切值。
语法
TAN ( float_expression )
参数
float_expression
float 或 real 类型的表达式,解释为弧度数。
返回类型
float
示例
下例返回 PI()/2 的正切值。
SELECT TAN(PI()/2)
下面是结果集:
----------------------
1.6331778728383844E+16