SQL內置Function--数学函数

数学函数

这些标量函数通常对作为参数提供的输入值执行计算,并返回一个数字值。

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

 

posted @ 2006-11-10 14:43  Athrun  阅读(1072)  评论(0编辑  收藏  举报