这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

算数函数

其中一些函数通过具有不同自变量类型的多种形式提供。除非另有注明,否则函数的给定形式返回与它的自变量相同的数据类型。在边界情况下,函数与 DOUBLE PRECISION 数据配合使用的准确性和行为可能会有所不同,具体取决于主机系统。

1 - ABS

返回实参的绝对值。返回值与实参的数据类型相同。

行为类型

不可变

语法

ABS ( expression )

参数

expression
为 INTEGER 或 DOUBLE PRECISION 类型的值

示例

SELECT ABS(-28.7);
 abs
------
 28.7
(1 row)

2 - ACOS

返回一个 DOUBLE PRECISION 值,该值表示实参的反三角余弦。

行为类型

不可变

语法

ACOS ( expression )

参数

expression
为 DOUBLE PRECISION 类型的值

示例

SELECT ACOS (1);
 acos
------
    0
(1 row)

3 - ASIN

返回一个 DOUBLE PRECISION 值,该值表示实参的三角反正弦。

行为类型

不可变

语法

ASIN ( expression )

参数

expression
为 DOUBLE PRECISION 类型的值

示例

SELECT ASIN(1);
      asin
-----------------
 1.5707963267949
(1 row)

4 - ATAN

返回一个 DOUBLE PRECISION 值,该值表示实参的三角反正切。

行为类型

不可变

语法

ATAN ( expression )

参数

表达式
DOUBLE PRECISION 值

示例

SELECT ATAN(1);
       atan
-------------------
 0.785398163397448
(1 row)

5 - ATAN2

返回一个 DOUBLE PRECISION 值,该值表示实参的算术被除数的三角反正切。

行为类型

不可变

语法

ATAN2 ( quotient, divisor )

参数

quotient
为表示商的 DOUBLE PRECISION 类型的表达式
divisor
为表示除数的 DOUBLE PRECISION 类型的表达式

示例

SELECT ATAN2(2,1);
      ATAN2
------------------
 1.10714871779409
(1 row)

6 - CBRT

返回实参的立方根。返回值的类型为 DOUBLE PRECISION。

行为类型

不可变

语法

CBRT ( expression )

参数

expression
DOUBLE PRECISION 类型的值

示例

SELECT CBRT(27.0);
 cbrt
------
    3
(1 row)

7 - CEILING

将返回值向上舍入到下一个整数。例如,给定实参 5.01 和 5.99,CEILING 返回 6。CEILING 与 FLOOR 相对,它向下舍入返回值。

行为类型

不可变

语法

CEIL[ING] ( expression )

参数

表达式
解析为 INTEGER 或 DOUBLE PRECISION 值。

示例

=> SELECT CEIL(-42.8);
 CEIL
------
  -42
(1 row)
SELECT CEIL(48.01);
 CEIL
------
   49
(1 row)

8 - COS

返回一个 DOUBLE PRECISION 值,该值表示所传递参数的三角余弦。

行为类型

不可变

语法

COS ( expression )

参数

expression
DOUBLE PRECISION 类型的表达式

示例

SELECT COS(-1);
       COS
------------------
 0.54030230586814
(1 row)

9 - COSH

返回一个 DOUBLE PRECISION 值,该值表示所传递参数的双曲余弦。

行为类型

不可变

语法

COSH ( expression )

参数

expression
DOUBLE PRECISION 类型的表达式

示例

=> SELECT COSH(-1);
       COSH
------------------
 1.54308063481524

10 - COT

返回一个 DOUBLE PRECISION 值,该值表示实参的三角余切。

行为类型

不可变

语法

COT ( expression )

参数

expression
为 DOUBLE PRECISION 类型的值

示例

SELECT COT(1);
        cot
-------------------
 0.642092615934331
(1 row)

11 - DEGREES

将表达式从弧度转换为小数度,或从度、分钟和秒转换为小数度。返回值的类型为 DOUBLE PRECISION。

行为类型

不可变

语法

DEGREES ( { radians | degrees, minutes, seconds } )

参数

弧度

角度测量单位。2π 弧度等于全角度。

角度测量单位,等于全角度的 1/360。

分钟

角度测量单位,表示 1/60 度。

角度测量单位,表示 1/60 分钟。

示例

SELECT DEGREES(0.5);
     DEGREES
------------------
 28.6478897565412
(1 row)

SELECT DEGREES(1,2,3);
     DEGREES
------------------
 1.03416666666667
(1 row)

12 - DISTANCE

返回两点之间的距离(以千米为单位)。指定起点和终点的纬度和经度。使用椭球体模型时,还可以指定曲率半径以实现更高的精度。

行为类型

不可变

语法

DISTANCE ( lat0, lon0, lat1, lon1 [, radius‑of‑curvature ] )

参数

lat0
起点纬度。
lon0
起点经度。
lat1
终点纬度
lon1
终点经度。
radius‑of‑curvature
指定起点与终点的中点处的地球曲率半径。当使用椭球状地球模型时,此参数允许更高的精度。如果忽略此参数,则 DISTANCE 使用 WGS-84 r1 平均半径,约为 6371.009 km。

示例

此示例查找纬度 45 度、经度 1 度的距离(以千米为单位),假设地球为球形。

SELECT DISTANCE(45,0,45,1);
      DISTANCE
----------------------
 78.6262959272162
(1 row)

13 - DISTANCEV

使用 Vincenty 公式返回两点之间的距离(以千米为单位)。由于 Vincenty 公式包含 WGS-84 椭球体模型的参数,因此无需指定曲率半径。指定起点和终点的纬度和经度。此函数的精度高于 DISTANCE 函数,但速度较慢。

行为类型

不可变

语法

DISTANCEV (lat0, lon0, lat1, lon1);

参数

lat0
指定起点的纬度。
lon0
指定起点的经度。
lat1
指定终点的纬度。
lon1
指定终点的经度。

示例

此示例查找纬度 45 度、经度 1 度的距离(以千米为单位),假设地球为椭球形。

SELECT DISTANCEV(45,0, 45,1);
    distanceV
------------------
 78.8463347095916
(1 row)

14 - EXP

返回指数函数,即某个数字的 e 次幂。返回值与实参的数据类型相同。

行为类型

不可变

语法

EXP ( exponent )

参数

exponent
为 INTEGER 或 DOUBLE PRECISION 类型表达式

示例

SELECT EXP(1.0);
       exp
------------------
 2.71828182845905
(1 row)

15 - FLOOR

将返回值向下舍入为前一个整数。例如,给定实参 5.01 和 5.99,FLOOR 返回 5。FLOOR 与 CEILING 相对,它向上舍入返回值。

行为类型

不可变

语法

FLOOR ( expression )

参数

表达式
解析为 INTEGER 或 DOUBLE PRECISION 值。

示例

=> SELECT FLOOR((TIMESTAMP '2005-01-17 10:00' - TIMESTAMP '2005-01-01') / INTERVAL '7');
 FLOOR
-------
     2
(1 row)

=> SELECT FLOOR(-42.8);
 FLOOR
-------
   -43
(1 row)

=> SELECT FLOOR(42.8);
 FLOOR
-------
    42
(1 row)

虽然以下示例看似 INTEGER,但左侧的数字为 INTEGER (2^49),而右侧的数字为 FLOAT:

=> SELECT 1<<49, FLOOR(1 << 49);
    ?column?     |      floor
-----------------+-----------------
 562949953421312 | 562949953421312
(1 row)

将前一示例与以下示例进行比较:

=> SELECT 1<<50, FLOOR(1 << 50);
     ?column?     |        floor
------------------+----------------------
 1125899906842624 | 1.12589990684262e+15
(1 row)

16 - HASH

通过函数实参计算哈希值,从而产生位于范围 0 <= x < 263 内的值。

HASH 函数通常用于对一组群集节点中的投射进行分段。此函数基于行在列中的值选择每个行的特定节点。HASH 函数在群集中均匀分布数据,有利于优化查询执行。

行为类型

不可变

语法

HASH ( { * | expression[,...] } )

参数

* | expression[,...]
以下几项之一:
  • * (星号)

    指定对查询表中的所有列运行哈希。

  • 表达式

    任何数据类型的表达式。expression 中包含的函数必须具有确定性。如果在投影的哈希分段子句中指定,各表达式通常解析为 列引用

示例

=> SELECT HASH(product_price, product_cost) FROM product_dimension
     WHERE product_price = '11';
        hash
---------------------
 4157497907121511878
 1799398249227328285
 3250220637492749639
(3 rows)

另请参阅

哈希分段子句

17 - LN

返回实参的自然对数。返回数据类型与实参相同。

行为类型

不可变

语法

LN ( expression )

参数

expression
为 INTEGER 或 DOUBLE PRECISION 类型表达式

示例

SELECT LN(2);
        ln
-------------------
 0.693147180559945
(1 row)

18 - LOG

返回实参的指定底的对数。返回值的数据类型与传递参数的数据类型相同。

行为类型

不可变

语法

LOG ( [ base, ] expression )

参数

base
指定基数(默认值为基数 10)
expression
INTEGER 或 DOUBLE PRECISION 类型表达式

示例

=> SELECT LOG(2.0, 64);
 LOG
-----
   6
(1 row)
SELECT LOG(100);
 LOG
-----
   2
(1 row)

19 - LOG10

返回 10 个基本实参对数,也被称为常用对数。返回值的数据类型与通过参数的数据类型相同。

行为类型

不可变

语法

LOG10 ( expression )

参数

expression
INTEGER 或 DOUBLE PRECISION 类型表达式

示例

=> SELECT LOG10(30);
       LOG10
------------------
 1.47712125471966
(1 row)

20 - MOD

返回除法运算的余数。

行为类型

不可变

语法

MOD( expression1, expression2 )

参数

expression1
指定被除数的数字数据类型
expression2
指定除数的数字数据类型。

计算规则

计算 MOD(expression1, expression2) 是采用下列规则:

  • 如果 expression1expression2 是 NULL 值,则结果是 NULL 值。

  • 如果 expression2 是零,则出现例外情况:数据异常 — 除数为 0。

  • 否则,结果是唯一的确切数字值 R,标度为 0 (zero),则下列各项为 true:

    • Rexpression2 具有相同的符号。

    • R 的绝对值小于 expression1 的绝对值。

    • 对于标度为 0 (零) 的一些精确数字值 K,expression2 = expression1 * K + R

示例

SELECT MOD(9,4);
 mod
-----
   1
(1 row)

SELECT MOD(10,3);
 mod
-----
   1
(1 row)

SELECT MOD(-10,3);
 mod
-----
  -1
(1 row)

SELECT MOD(-10,-3);
 mod
-----
  -1
(1 row)

SELECT MOD(10,-3);
 mod
-----
   1
(1 row)

=> SELECT MOD(6.2,0);
ERROR 3117:  Division by zero

21 - PI

返回常数 pi (P),即欧式几何中任何圆的周长与其直径的比值。返回类型为 DOUBLE PRECISION。

行为类型

不可变

语法

PI()

示例

SELECT PI();
        pi
------------------
 3.14159265358979
(1 row)

22 - POWER

返回 DOUBLE PRECISION 值,表示一个数字的另一个数字的幂。

行为类型

不可变

语法

POW[ER] ( expression1, expression2 )

参数

expression1
表示基数的 DOUBLE PRECISION 值。
expression2
表示指数的 DOUBLE PRECISION 值。

示例

SELECT POWER(9.0, 3.0);
 power
-------
   729
(1 row)

23 - RADIANS

返回一个 DOUBLE PRECISION 值,该值表示以弧度表示的角度。您可以在 DEGREES 中表达输入角度,并且可以选择包括分钟数和秒数。

行为类型

不可变

语法

RADIANS (degrees [, minutes, seconds])

参数

degrees
角度测量单位,表示全角度的 1/360。
minutes
角度测量单位,表示 1/60 度。
seconds
角度测量单位,表示 1/60 分钟。

示例

SELECT RADIANS(45);
      RADIANS
-------------------
 0.785398163397448
(1 row)

SELECT RADIANS (1,2,3);
      RADIANS
-------------------
 0.018049613347708
(1 row)

24 - RANDOM

返回均匀分布的随机 DOUBLE PRECISIONx,其中 0 <= x < 1。

典型的伪随机发生器接受一个种子,该种子被设置为生成可重现的伪随机序列。但是,Vertica 会在节点群集中分布 SQL 处理,其中每个节点都产生其自己的独立随机序列。

基于 RANDOM 的结果是不可重现的,因为该工作可能在各个节点之间以不同方式划分。因此,Vertica 会在每次执行请求时为每个节点自动生成真正的随机种子,并且不会提供一种机制来强制生成特定种子。

行为类型

易变

语法

RANDOM()

示例

在下例中,RANDOM 返回 ≥ 0 且 < 1.0 的浮点数:

SELECT RANDOM();
      random
-------------------
 0.211625560652465
(1 row)

25 - RANDOMINT

接受并返回 INTEGER 值。 RANDOMINT(n) 返回从 0n – 1n 个整数之一。

典型的伪随机发生器接受一个种子,该种子被设置为生成可重现的伪随机序列。但是,Vertica 会在节点群集中分布 SQL 处理,其中每个节点都产生其自己的独立随机序列。

基于 RANDOM 的结果是不可重现的,因为该工作可能在各个节点之间以不同方式划分。因此,Vertica 会在每次执行请求时为每个节点自动生成真正的随机种子,并且不会提供一种机制来强制生成特定种子。

行为类型

易变

语法

RANDOMINT ( n )

参数

接受的值为介于 1 到 9,223,372,036,854,775,807 之间的任何正整数 (n)。

有关整数数据类型的常规信息,请参阅 INTEGER 部分。

限制

如果提供负值或超出最大值,Vertica 将返回错误。

示例

在下例中,结果为 INTEGER,即 >= 0 且 < n,从集合 {0,1,2,3,4} 中随机选择。

=> SELECT RANDOMINT(5);
RANDOMINT
----------
        3
(1 row)

26 - RANDOMINT_CRYPTO

接受并返回从 0 到指定函数实参 -1 之间的一组值中的一个 INTEGER 值。对于此加密随机数生成器,Vertica 使用 RAND_bytes 提供随机值。

行为类型

易变

语法

RANDOMINT_CRYPTO ( integer‑expression )

参数

integer‑expression
解析为介于 1 到 263(包含 1)之间的正整数。

示例

在下例中,RANDOMINT_CRYPTO 返回 >= 0 且小于指定实参 5 的 INTEGER,从集合 {0,1,2,3,4} 中随机选择。

=> SELECT RANDOMINT_crypto(5);
RANDOMINT_crypto
----------------
               3
(1 row)

27 - ROUND

将值四舍五入到指定的小数位数,保留原始精度和小数位数。大于或等于 0.5 的小数部分将四舍五入。小于 0.5 的分数向下舍入(截断)。

行为类型

不可变

语法

ROUND ( expression [ , places ] )

参数

expression
NUMERICDOUBLE PRECISION (FLOAT) 类型的表达式。
places
INTEGER 值。当 places 为正整数时,Vertica 使用指定位数对小数点右侧的值进行四舍五入。当 places 为负整数时,Vertica 使用指定位数对小数点左侧的值进行四舍五入。

注意

ROUNDNUMERIC 数据类型配合使用,则返回 NUMERIC 并保留原始精度和标度。

=> SELECT ROUND(3.5);
 ROUND
-------
   4.0
(1 row)

示例

=> SELECT ROUND(2.0, 1.0) FROM dual;
 ROUND
-------
   2.0
(1 row)
=> SELECT ROUND(12.345, 2.0);
 ROUND
--------
 12.350
(1 row)
=> SELECT ROUND(3.444444444444444);
       ROUND
-------------------
 3.000000000000000
(1 row)
=> SELECT ROUND(3.14159, 3);
  ROUND
---------
 3.14200
(1 row)
=> SELECT ROUND(1234567, -3);
  ROUND
---------
 1235000
(1 row)
=> SELECT ROUND(3.4999, -1);
 ROUND
--------
 0.0000
(1 row)

以下示例创建了一个包含两列的表,添加了一行值,显示小数点左侧和右侧的舍入示例。

=> CREATE TABLE sampleround (roundcol1 NUMERIC, roundcol2 NUMERIC);
CREATE TABLE

=> INSERT INTO sampleround VALUES (1234567, .1234567);
 OUTPUT
--------
      1
(1 row)

=> SELECT ROUND(roundcol1,-3) AS pn3, ROUND(roundcol1,-4) AS pn4, ROUND(roundcol1,-5) AS pn5 FROM sampleround;

           pn3           |           pn4           |           pn5
-------------------------+-------------------------+-------------------------
 1235000.000000000000000 | 1230000.000000000000000 | 1200000.000000000000000
(1 row)

=> SELECT ROUND(roundcol2,3) AS p3, ROUND(roundcol2,4) AS p4, ROUND(roundcol2,5) AS p5 FROM sampleround;

        p3         |        p4         |        p5
-------------------+-------------------+-------------------
 0.123000000000000 | 0.123500000000000 | 0.123460000000000
(1 row)

28 - SIGN

返回 DOUBLE PRECISION 值 -1、0 或 1,该值表示实参的算术符号。

行为类型

不可变

语法

SIGN ( expression )

参数

expression
为 DOUBLE PRECISION 类型表达式

示例

SELECT SIGN(-8.4);
 sign
------
   -1
(1 row)

29 - SIN

返回 DOUBLE PRECISION 值,表示已传递参数的三角正弦。

行为类型

不可变

语法

SIN ( expression )

参数

expression
DOUBLE PRECISION 类型的表达式

示例

SELECT SIN(30 * 2 * 3.14159 / 360);
        SIN
-------------------
 0.499999616987256
(1 row)

30 - SINH

返回 DOUBLE PRECISION 值,表示已传递参数的双曲正弦。

行为类型

不可变

语法

SINH ( expression )

参数

expression
DOUBLE PRECISION 类型的表达式

示例

=> SELECT SINH(30 * 2 * 3.14159 / 360);
        SINH
-------------------
 0.547852969600632

31 - SQRT

返回一个 DOUBLE PRECISION 值,该值表示实参的算术平方根。

行为类型

不可变

语法

SQRT ( expression )

参数

expression
为 DOUBLE PRECISION 类型表达式

示例

SELECT SQRT(2);
      sqrt
-----------------
 1.4142135623731
(1 row)

32 - TAN

返回一个 DOUBLE PRECISION 值,该值表示所传递参数的三角正切。

行为类型

不可变

语法

TAN ( expression )

参数

expression
DOUBLE PRECISION 类型的表达式

示例

=> SELECT TAN(30);
        TAN
-------------------
 -6.40533119664628
(1 row)

33 - TANH

返回 DOUBLE PRECISION 值表示传递参数的双曲正切。

行为类型

不可变

语法

TANH ( expression )

参数

expression
DOUBLE PRECISION 类型的表达式

示例

=> SELECT TANH(-1);
        TANH
-------------------
  -0.761594155955765

34 - TRUNC

返回完全截断的 expression 值(接近零)。提供 places 实参可将表达式截断为您指定的小数位数。

行为类型

不可变

语法

TRUNC ( expression [ , places ] )

参数

expression
NUMERICDOUBLE PRECISION (FLOAT) 类型的表达式。
places
INTEGER 值。当 places 为正整数时,Vertica 可对小数点右侧的值进行截断。当 places 为负整数时,Vertica 可对小数点左侧的值进行截断。

注意

TRUNCNUMERIC 数据类型配合使用,则返回 NUMERIC 并保留原始精度和标度。

=> SELECT TRUNC(3.5);
 TRUNC
-------
   3.0
(1 row)

示例

=> SELECT TRUNC(42.8);
 TRUNC
-------
  42.0
(1 row)
=> SELECT TRUNC(42.4382, 2);
  TRUNC
---------
 42.4300
(1 row)

以下示例创建了一个包含两列的表,添加了一行值,显示小数点左侧和右侧的截断示例。

=> CREATE TABLE sampletrunc (truncol1 NUMERIC, truncol2 NUMERIC);
CREATE TABLE

=> INSERT INTO sampletrunc VALUES (1234567, .1234567);
 OUTPUT
--------
      1
(1 row)

=> SELECT TRUNC(truncol1,-3) AS p3, TRUNC(truncol1,-4) AS p4, TRUNC(truncol1,-5) AS p5 FROM sampletrunc;

           p3            |           p4            |           p5
-------------------------+-------------------------+-------------------------
 1234000.000000000000000 | 1230000.000000000000000 | 1200000.000000000000000
(1 row)

=> SELECT TRUNC(truncol2,3) AS p3, TRUNC(truncol2,4) AS p4, TRUNC(truncol2,5) AS p5 FROM sampletrunc;

        p3         |        p4         |        p5
-------------------+-------------------+-------------------
 0.123000000000000 | 0.123400000000000 | 0.123450000000000
(1 row)

35 - WIDTH_BUCKET

构建等宽直方图,其中直方图的范围被分为相同大小的区间(存储桶)。此外,低存储桶以下的值返回 0,高存储桶以上的值返回 bucket_count +1。返回整数值。

行为类型

不可变

语法

WIDTH_BUCKET ( expression, hist_min, hist_max, bucket_count )

参数

expression
为其创建直方图的表达式。此表达式必须评估为 numeric 或 datetime 值,或可隐式转换为 numeric 或 datetime 值。如果 expression 求值结果为 NULL,则 expression 返回 NULL。
hist_min
一个表达式,解析为存储桶 1 的下限。必须也评估为 numeric 或 datetime 值,不能评估为 null。
hist_max
一个表达式,解析为存储桶 bucket_count 上限。必须也评估为 numeric 或 datetime 值,不能评估为 null。
bucket_count
一个表达式,解析为常数,代表存储桶的数量。此表达式始终评估为正数 INTEGER。

注意

  • WIDTH_BUCKET 将数据集分成多个等宽的存储桶。例如,Age = 0–20, 20–40, 40–60, 60–80。这称为等宽直方图。

  • 使用 WIDTH_BUCKET 时,请注意最小和最大边界值。每个存储桶包含等于或大于该存储桶基准数的值,所以年龄范围 0–20、20–40 等等实际上是 0–19.99 和 20–39.999。

  • WIDTH_BUCKET 接受以下数据类型:(FLOAT 和/或 INTEGER)、(TIMESTAMP 和/或 DATE 和/或 TIMESTAMPTZ)或 (INTERVAL和/或 TIME)。

示例

下述示例返回五个可能值,有三个存储桶:0 [100以下)、1 [100–300)、2 [300–500)、3 [500–700) 和 4 [700 及以上):

SELECT product_description, product_cost, WIDTH_BUCKET(product_cost, 100, 700, 3);

下述示例针对康涅狄格州的女医生顾客,在 annual_income 列上创建包含九个存储桶的直方图。结果将存储桶编号返回到“Income”列,共分为 11 个存储桶,其中包括下溢桶和溢出桶。请注意,如果顾客的年收入高于最大值,则分配到溢出桶 10:

SELECT customer_name, annual_income, WIDTH_BUCKET (annual_income, 100000, 1000000, 9) AS "Income"
FROM public.customer_dimension WHERE customer_state='CT'
AND title='Dr.' AND customer_gender='Female' AND household_id < '1000'
ORDER BY "Income";

在下述结果集中,之所以有存储桶 0,是因为存储桶从 1 到 bucket_count 进行编号。任何低于 hist_min 给定值的,都进入存储桶 0;任何高于 hist_max 给定值的,都进入存储桶 bucket_count+1。在这个示例中,存储桶 9 是空的,没有溢出。值 12,283 小于 100,000,因此进入下溢桶。

   customer_name    | annual_income | Income
--------------------+---------------+--------
 Joanna A. Nguyen   |         12283 |      0
 Amy I. Nguyen      |        109806 |      1
 Juanita L. Taylor  |        219002 |      2
 Carla E. Brown     |        240872 |      2
 Kim U. Overstreet  |        284011 |      2
 Tiffany N. Reyes   |        323213 |      3
 Rebecca V. Martin  |        324493 |      3
 Betty . Roy        |        476055 |      4
 Midori B. Young    |        462587 |      4
 Martha T. Brown    |        687810 |      6
 Julie D. Miller    |        616509 |      6
 Julie Y. Nielson   |        894910 |      8
 Sarah B. Weaver    |        896260 |      8
 Jessica C. Nielson |        861066 |      8
(14 rows)

另请参阅