[role="xpack"]
[testenv="basic"]
[[sql-functions-math]]
=== Math Functions

All math and trigonometric functions require their input (where applicable)
to be numeric.

==== Generic

[[sql-functions-math-abs]]
===== `ABS`

.Synopsis:
[source, sql]
--------------------------------------------------
ABS(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: numeric

.Description:

Returns the https://en.wikipedia.org/wiki/Absolute_value[absolute value] of `numeric_exp`. The return type is the same as the input type.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[abs]
--------------------------------------------------

[[sql-functions-math-cbrt]]
===== `CBRT`

.Synopsis:
[source, sql]
--------------------------------------------------
CBRT(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Cube_root[cube root] of `numeric_exp`.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineCbrtWithNegativeValue]
--------------------------------------------------

[[sql-functions-math-ceil]]
===== `CEIL/CEILING`

.Synopsis:
[source, sql]
--------------------------------------------------
CEIL(numeric_exp<1>)
CEILING(numeric_exp<2>)
--------------------------------------------------

*Input*:

<1> numeric expression
<2> numeric expression

*Output*: integer or long numeric value

.Description:

Returns the smallest integer greater than or equal to `numeric_exp`.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineCeiling]
--------------------------------------------------

[[sql-functions-math-e]]
===== `E`

.Synopsis:
[source, sql]
--------------------------------------------------
E()
--------------------------------------------------

*Input*: _none_

*Output*: `2.718281828459045`

.Description:

Returns https://en.wikipedia.org/wiki/E_%28mathematical_constant%29[Euler's number].

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathEulersNumber]
--------------------------------------------------

[[sql-functions-math-exp]]
===== `EXP`

.Synopsis:
[source, sql]
--------------------------------------------------
EXP(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> float numeric expression

*Output*: double numeric value

.Description:

Returns https://en.wikipedia.org/wiki/Exponential_function[Euler's number at the power] of `numeric_exp` e^numeric_exp^.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathExpInline]
--------------------------------------------------

[[sql-functions-math-expm1]]
===== `EXPM1`

.Synopsis:
[source, sql]
--------------------------------------------------
EXPM1(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> float numeric expression

*Output*: double numeric value

.Description:

Returns https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#expm1-double-[Euler's number at the power] of `numeric_exp` minus 1 (e^numeric_exp^ - 1).

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathExpm1Inline]
--------------------------------------------------

[[sql-functions-math-floor]]
===== `FLOOR`

.Synopsis:
[source, sql]
--------------------------------------------------
FLOOR(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: integer or long numeric value

.Description:

Returns the largest integer less than or equal to `numeric_exp`.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineFloor]
--------------------------------------------------

[[sql-functions-math-log]]
===== `LOG`

.Synopsis:
[source, sql]
--------------------------------------------------
LOG(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Natural_logarithm[natural logarithm] of `numeric_exp`.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineLog]
--------------------------------------------------

[[sql-functions-math-log10]]
===== `LOG10`

.Synopsis:
[source, sql]
--------------------------------------------------
LOG10(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Common_logarithm[base 10 logarithm] of `numeric_exp`.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineLog10]
--------------------------------------------------

[[sql-functions-math-pi]]
===== `PI`

.Synopsis:
[source, sql]
--------------------------------------------------
PI()
--------------------------------------------------

*Input*: _none_

*Output*: `3.141592653589793`

.Description:

Returns https://en.wikipedia.org/wiki/Pi[PI number].

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathPINumber]
--------------------------------------------------

[[sql-functions-math-power]]
===== `POWER`

.Synopsis:
[source, sql]
--------------------------------------------------
POWER(numeric_exp<1>, integer_exp<2>)
--------------------------------------------------

*Input*:

<1> numeric expression
<2> integer expression

*Output*: double numeric value

.Description:

Returns the value of `numeric_exp` to the power of `integer_exp`.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlinePowerPositive]
--------------------------------------------------

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlinePowerNegative]
--------------------------------------------------

[[sql-functions-math-random]]
===== `RANDOM`

.Synopsis:
[source, sql]
--------------------------------------------------
RANDOM(seed<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns a random double using the given seed.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathRandom]
--------------------------------------------------

[[sql-functions-math-round]]
===== `ROUND`

.Synopsis:
[source, sql]
----
ROUND(numeric_exp<1>[, integer_exp<2>])
----
*Input*:

<1> numeric expression
<2> integer expression; optional

*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`.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathRoundWithPositiveParameter]
--------------------------------------------------

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathRoundWithNegativeParameter]
--------------------------------------------------

[[sql-functions-math-sign]]
===== `SIGN`

.Synopsis:
[source, sql]
--------------------------------------------------
SIGN(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*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.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineSign]
--------------------------------------------------


[[sql-functions-math-sqrt]]
===== `SQRT`

.Synopsis:
[source, sql]
--------------------------------------------------
SQRT(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns https://en.wikipedia.org/wiki/Square_root[square root] of `numeric_exp`.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineSqrt]
--------------------------------------------------

[[sql-functions-math-truncate]]
===== `TRUNCATE`

.Synopsis:
[source, sql]
----
TRUNCATE(numeric_exp<1>[, integer_exp<2>])
----
*Input*:

<1> numeric expression
<2> integer expression; optional

*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`.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathTruncateWithPositiveParameter]
--------------------------------------------------

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathTruncateWithNegativeParameter]
--------------------------------------------------

==== Trigonometric

[[sql-functions-math-acos]]
===== `ACOS`

.Synopsis:
[source, sql]
--------------------------------------------------
ACOS(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Inverse_trigonometric_functions[arccosine] of `numeric_exp` as an angle, expressed in radians.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineAcos]
--------------------------------------------------

[[sql-functions-math-asin]]
===== `ASIN`

.Synopsis:
[source, sql]
--------------------------------------------------
ASIN(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Inverse_trigonometric_functions[arcsine] of `numeric_exp` as an angle, expressed in radians.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineAsin]
--------------------------------------------------

[[sql-functions-math-atan]]
===== `ATAN`

.Synopsis:
[source, sql]
--------------------------------------------------
ATAN(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Inverse_trigonometric_functions[arctangent] of `numeric_exp` as an angle, expressed in radians.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineAtan]
--------------------------------------------------

[[sql-functions-math-atan2]]
===== `ATAN2`

.Synopsis:
[source, sql]
--------------------------------------------------
ATAN2(ordinate<1>, abscisa<2>)
--------------------------------------------------

*Input*:

<1> numeric expression
<2> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Atan2[arctangent of the `ordinate` and `abscisa` coordinates] specified as an angle, expressed in radians.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineAtan2]
--------------------------------------------------

[[sql-functions-math-cos]]
===== `COS`

.Synopsis:
[source, sql]
--------------------------------------------------
COS(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Trigonometric_functions#cosine[cosine] of `numeric_exp`, where `numeric_exp` is an angle expressed in radians.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineCosine]
--------------------------------------------------

[[sql-functions-math-cosh]]
===== `COSH`

.Synopsis:
[source, sql]
--------------------------------------------------
COSH(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Hyperbolic_function[hyperbolic cosine] of `numeric_exp`.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineCosh]
--------------------------------------------------

[[sql-functions-math-cot]]
===== `COT`

.Synopsis:
[source, sql]
--------------------------------------------------
COT(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Trigonometric_functions#Cosecant,_secant,_and_cotangent[cotangent] of `numeric_exp`, where `numeric_exp` is an angle expressed in radians.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineCotangent]
--------------------------------------------------

[[sql-functions-math-degrees]]
===== `DEGREES`

.Synopsis:
[source, sql]
--------------------------------------------------
DEGREES(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Convert from https://en.wikipedia.org/wiki/Radian[radians]
to https://en.wikipedia.org/wiki/Degree_(angle)[degrees].

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineDegrees]
--------------------------------------------------

[[sql-functions-math-radians]]
===== `RADIANS`

.Synopsis:
[source, sql]
--------------------------------------------------
RADIANS(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Convert from https://en.wikipedia.org/wiki/Degree_(angle)[degrees]
to https://en.wikipedia.org/wiki/Radian[radians].

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineRadians]
--------------------------------------------------

[[sql-functions-math-sin]]
===== `SIN`

.Synopsis:
[source, sql]
--------------------------------------------------
SIN(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Trigonometric_functions#sine[sine] of `numeric_exp`, where `numeric_exp` is an angle expressed in radians.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineSine]
--------------------------------------------------

[[sql-functions-math-sinh]]
===== `SINH`

.Synopsis:
[source, sql]
--------------------------------------------------
SINH(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Hyperbolic_function[hyperbolic sine] of `numeric_exp`.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineSinh]
--------------------------------------------------

[[sql-functions-math-tan]]
===== `TAN`

.Synopsis:
[source, sql]
--------------------------------------------------
TAN(numeric_exp<1>)
--------------------------------------------------

*Input*:

<1> numeric expression

*Output*: double numeric value

.Description:

Returns the https://en.wikipedia.org/wiki/Trigonometric_functions#tangent[tangent] of `numeric_exp`, where `numeric_exp` is an angle expressed in radians.

["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[mathInlineTanget]
--------------------------------------------------
