elasticsearch/docs/reference/query-languages/sql/sql-functions-math.md

717 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
mapped_pages:
- https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-functions-math.html
---
# Mathematical functions [sql-functions-math]
All math and trigonometric functions require their input (where applicable) to be numeric.
## Generic [sql-functions-math-generic]
## `ABS` [sql-functions-math-abs]
```sql
ABS(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: numeric
**Description**: Returns the [absolute value](https://en.wikipedia.org/wiki/Absolute_value) of `numeric_exp`. The return type is the same as the input type.
```sql
SELECT ABS(-123.5), ABS(55);
ABS(-123.5) | ABS(55)
---------------+---------------
123.5 |55
```
## `CBRT` [sql-functions-math-cbrt]
```sql
CBRT(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [cube root](https://en.wikipedia.org/wiki/Cube_root) of `numeric_exp`.
```sql
SELECT CBRT(-125.5);
CBRT(-125.5)
-------------------
-5.0066577974783435
```
## `CEIL/CEILING` [sql-functions-math-ceil]
```sql
CEIL(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: integer or long numeric value
**Description**: Returns the smallest integer greater than or equal to `numeric_exp`.
```sql
SELECT CEIL(125.01), CEILING(-125.99);
CEIL(125.01) |CEILING(-125.99)
---------------+----------------
126 |-125
```
## `E` [sql-functions-math-e]
```sql
E()
```
**Input**: *none*
**Output**: `2.718281828459045`
**Description**: Returns [Eulers number](https://en.wikipedia.org/wiki/E_%28mathematical_constant%29).
```sql
SELECT E(), CEIL(E());
E() | CEIL(E())
-----------------+---------------
2.718281828459045|3
```
## `EXP` [sql-functions-math-exp]
```sql
EXP(numeric_exp) <1>
```
**Input**:
1. float numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns [Eulers number at the power](https://en.wikipedia.org/wiki/Exponential_function) of `numeric_exp` enumeric_exp.
```sql
SELECT EXP(1), E(), EXP(2), E() * E();
EXP(1) | E() | EXP(2) | E() * E()
-----------------+-----------------+----------------+------------------
2.718281828459045|2.718281828459045|7.38905609893065|7.3890560989306495
```
## `EXPM1` [sql-functions-math-expm1]
```sql
EXPM1(numeric_exp) <1>
```
**Input**:
1. float numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns [Eulers number at the power](https://en.wikipedia.org/wiki/Exponential_function) of `numeric_exp` minus 1 (enumeric_exp - 1).
```sql
SELECT E(), EXP(2), EXPM1(2);
E() | EXP(2) | EXPM1(2)
-----------------+----------------+----------------
2.718281828459045|7.38905609893065|6.38905609893065
```
## `FLOOR` [sql-functions-math-floor]
```sql
FLOOR(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: integer or long numeric value
**Description**: Returns the largest integer less than or equal to `numeric_exp`.
```sql
SELECT FLOOR(125.01), FLOOR(-125.99);
FLOOR(125.01) |FLOOR(-125.99)
---------------+---------------
125 |-126
```
## `LOG` [sql-functions-math-log]
```sql
LOG(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [natural logarithm](https://en.wikipedia.org/wiki/Natural_logarithm) of `numeric_exp`.
```sql
SELECT EXP(3), LOG(20.085536923187668);
EXP(3) |LOG(20.085536923187668)
------------------+-----------------------
20.085536923187668|3.0
```
## `LOG10` [sql-functions-math-log10]
```sql
LOG10(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [base 10 logarithm](https://en.wikipedia.org/wiki/Common_logarithm) of `numeric_exp`.
```sql
SELECT LOG10(5), LOG(5)/LOG(10);
LOG10(5) | LOG(5)/LOG(10)
------------------+-----------------------
0.6989700043360189|0.6989700043360187
```
## `PI` [sql-functions-math-pi]
```sql
PI()
```
**Input**: *none*
**Output**: `3.141592653589793`
**Description**: Returns [PI number](https://en.wikipedia.org/wiki/Pi).
```sql
SELECT PI();
PI()
-----------------
3.141592653589793
```
## `POWER` [sql-functions-math-power]
```sql
POWER(
numeric_exp, <1>
integer_exp) <2>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
2. integer expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the value of `numeric_exp` to the power of `integer_exp`.
```sql
SELECT POWER(3, 2), POWER(3, 3);
POWER(3, 2) | POWER(3, 3)
---------------+---------------
9.0 |27.0
```
```sql
SELECT POWER(5, -1), POWER(5, -2);
POWER(5, -1) | POWER(5, -2)
---------------+---------------
0.2 |0.04
```
## `RANDOM/RAND` [sql-functions-math-random]
```sql
RANDOM(seed) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns a random double using the given seed.
```sql
SELECT RANDOM(123);
RANDOM(123)
------------------
0.7231742029971469
```
## `ROUND` [sql-functions-math-round]
```sql
ROUND(
numeric_exp <1>
[, integer_exp]) <2>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
2. integer expression; optional. If `null`, the function returns `null`.
**Output**: numeric
**Description**: Returns `numeric_exp` rounded to `integer_exp` places right of the decimal point. If `integer_exp` is negative, `numeric_exp` is rounded to |`integer_exp`| places to the left of the decimal point. If `integer_exp` is omitted, the function will perform as if `integer_exp` would be 0. The returned numeric data type is the same as the data type of `numeric_exp`.
```sql
SELECT ROUND(-345.153, 1) AS rounded;
rounded
---------------
-345.2
```
```sql
SELECT ROUND(-345.153, -1) AS rounded;
rounded
---------------
-350.0
```
## `SIGN/SIGNUM` [sql-functions-math-sign]
```sql
SIGN(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: [-1, 0, 1]
**Description**: Returns an indicator of the sign of `numeric_exp`. If `numeric_exp` is less than zero, 1 is returned. If `numeric_exp` equals zero, 0 is returned. If `numeric_exp` is greater than zero, 1 is returned.
```sql
SELECT SIGN(-123), SIGN(0), SIGN(415);
SIGN(-123) | SIGN(0) | SIGN(415)
---------------+---------------+---------------
-1 |0 |1
```
## `SQRT` [sql-functions-math-sqrt]
```sql
SQRT(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns [square root](https://en.wikipedia.org/wiki/Square_root) of `numeric_exp`.
```sql
SELECT SQRT(EXP(2)), E(), SQRT(25);
SQRT(EXP(2)) | E() | SQRT(25)
-----------------+-----------------+---------------
2.718281828459045|2.718281828459045|5.0
```
## `TRUNCATE/TRUNC` [sql-functions-math-truncate]
```sql
TRUNCATE(
numeric_exp <1>
[, integer_exp]) <2>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
2. integer expression; optional. If `null`, the function returns `null`.
**Output**: numeric
**Description**: Returns `numeric_exp` truncated to `integer_exp` places right of the decimal point. If `integer_exp` is negative, `numeric_exp` is truncated to |`integer_exp`| places to the left of the decimal point. If `integer_exp` is omitted, the function will perform as if `integer_exp` would be 0. The returned numeric data type is the same as the data type of `numeric_exp`.
```sql
SELECT TRUNC(-345.153, 1) AS trimmed;
trimmed
---------------
-345.1
```
```sql
SELECT TRUNCATE(-345.153, -1) AS trimmed;
trimmed
---------------
-340.0
```
## Trigonometric [sql-functions-math-trigonometric]
## `ACOS` [sql-functions-math-acos]
```sql
ACOS(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [arccosine](https://en.wikipedia.org/wiki/Inverse_trigonometric_functions) of `numeric_exp` as an angle, expressed in radians.
```sql
SELECT ACOS(COS(PI())), PI();
ACOS(COS(PI())) | PI()
-----------------+-----------------
3.141592653589793|3.141592653589793
```
## `ASIN` [sql-functions-math-asin]
```sql
ASIN(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [arcsine](https://en.wikipedia.org/wiki/Inverse_trigonometric_functions) of `numeric_exp` as an angle, expressed in radians.
```sql
SELECT ROUND(DEGREES(ASIN(0.7071067811865475))) AS "ASIN(0.707)", ROUND(SIN(RADIANS(45)), 3) AS "SIN(45)";
ASIN(0.707) | SIN(45)
---------------+---------------
45.0 |0.707
```
## `ATAN` [sql-functions-math-atan]
```sql
ATAN(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [arctangent](https://en.wikipedia.org/wiki/Inverse_trigonometric_functions) of `numeric_exp` as an angle, expressed in radians.
```sql
SELECT DEGREES(ATAN(TAN(RADIANS(90))));
DEGREES(ATAN(TAN(RADIANS(90))))
-------------------------------
90.0
```
## `ATAN2` [sql-functions-math-atan2]
```sql
ATAN2(
ordinate, <1>
abscisa) <2>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
2. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [arctangent of the `ordinate` and `abscisa` coordinates](https://en.wikipedia.org/wiki/Atan2) specified as an angle, expressed in radians.
```sql
SELECT ATAN2(5 * SIN(RADIANS(45)), 5 * COS(RADIANS(45))) AS "ATAN2(5*SIN(45), 5*COS(45))", RADIANS(45);
ATAN2(5*SIN(45), 5*COS(45))| RADIANS(45)
---------------------------+------------------
0.7853981633974483 |0.7853981633974483
```
## `COS` [sql-functions-math-cos]
```sql
COS(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [cosine](https://en.wikipedia.org/wiki/Trigonometric_functions#cosine) of `numeric_exp`, where `numeric_exp` is an angle expressed in radians.
```sql
SELECT COS(RADIANS(180)), POWER(SIN(RADIANS(54)), 2) + POWER(COS(RADIANS(54)), 2) AS pythagorean_identity;
COS(RADIANS(180))|pythagorean_identity
-----------------+--------------------
-1.0 |1.0
```
## `COSH` [sql-functions-math-cosh]
```sql
COSH(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [hyperbolic cosine](https://en.wikipedia.org/wiki/Hyperbolic_function) of `numeric_exp`.
```sql
SELECT COSH(5), (POWER(E(), 5) + POWER(E(), -5)) / 2 AS "(e^5 + e^-5)/2";
COSH(5) | (e^5 + e^-5)/2
-----------------+-----------------
74.20994852478785|74.20994852478783
```
## `COT` [sql-functions-math-cot]
```sql
COT(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [cotangent](https://en.wikipedia.org/wiki/Trigonometric_functions#Cosecant,_secant,_and_cotangent) of `numeric_exp`, where `numeric_exp` is an angle expressed in radians.
```sql
SELECT COT(RADIANS(30)) AS "COT(30)", COS(RADIANS(30)) / SIN(RADIANS(30)) AS "COS(30)/SIN(30)";
COT(30) | COS(30)/SIN(30)
------------------+------------------
1.7320508075688774|1.7320508075688776
```
## `DEGREES` [sql-functions-math-degrees]
```sql
DEGREES(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Convert from [radians](https://en.wikipedia.org/wiki/Radian) to [degrees](https://en.wikipedia.org/wiki/Degree_(angle)).
```sql
SELECT DEGREES(PI() * 2), DEGREES(PI());
DEGREES(PI() * 2)| DEGREES(PI())
-----------------+---------------
360.0 |180.0
```
## `RADIANS` [sql-functions-math-radians]
```sql
RADIANS(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Convert from [degrees](https://en.wikipedia.org/wiki/Degree_(angle)) to [radians](https://en.wikipedia.org/wiki/Radian).
```sql
SELECT RADIANS(90), PI()/2;
RADIANS(90) | PI()/2
------------------+------------------
1.5707963267948966|1.5707963267948966
```
## `SIN` [sql-functions-math-sin]
```sql
SIN(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [sine](https://en.wikipedia.org/wiki/Trigonometric_functions#sine) of `numeric_exp`, where `numeric_exp` is an angle expressed in radians.
```sql
SELECT SIN(RADIANS(90)), POWER(SIN(RADIANS(67)), 2) + POWER(COS(RADIANS(67)), 2) AS pythagorean_identity;
SIN(RADIANS(90))|pythagorean_identity
----------------+--------------------
1.0 |1.0
```
## `SINH` [sql-functions-math-sinh]
```sql
SINH(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [hyperbolic sine](https://en.wikipedia.org/wiki/Hyperbolic_function) of `numeric_exp`.
```sql
SELECT SINH(5), (POWER(E(), 5) - POWER(E(), -5)) / 2 AS "(e^5 - e^-5)/2";
SINH(5) | (e^5 - e^-5)/2
-----------------+-----------------
74.20321057778875|74.20321057778874
```
## `TAN` [sql-functions-math-tan]
```sql
TAN(numeric_exp) <1>
```
**Input**:
1. numeric expression. If `null`, the function returns `null`.
**Output**: double numeric value
**Description**: Returns the [tangent](https://en.wikipedia.org/wiki/Trigonometric_functions#tangent) of `numeric_exp`, where `numeric_exp` is an angle expressed in radians.
```sql
SELECT TAN(RADIANS(66)) AS "TAN(66)", SIN(RADIANS(66))/COS(RADIANS(66)) AS "SIN(66)/COS(66)=TAN(66)";
TAN(66) |SIN(66)/COS(66)=TAN(66)
------------------+-----------------------
2.2460367739042164|2.246036773904216
```