Mathematical functions in GoogleSQL

GoogleSQL for Spanner supports mathematical functions.All mathematical functions have the following behaviors:

  • They returnNULL if any of the input parameters isNULL.
  • They returnNaN if any of the arguments isNaN.

Categories

CategoryFunctions
TrigonometricACOS  ACOSH  ASIN  ASINH  ATAN  ATAN2  ATANH  COS  COSH  SIN  SINH  TAN  TANH  
Exponential and
logarithmic
EXP  LN  LOG  LOG10  
Rounding and
truncation
CEIL  CEILING  FLOOR  ROUND  TRUNC  
Power and
root
POW  POWER  SQRT  
SignABS  SIGN  
DistanceAPPROX_DOT_PRODUCT  APPROX_COSINE_DISTANCE  APPROX_EUCLIDEAN_DISTANCE  DOT_PRODUCT  COSINE_DISTANCE  EUCLIDEAN_DISTANCE  
ComparisonGREATEST  LEAST  
Arithmetic and error handlingDIV  IEEE_DIVIDE  IS_INF  IS_NAN  MOD  SAFE_ADD  SAFE_DIVIDE  SAFE_MULTIPLY  SAFE_NEGATE  SAFE_SUBTRACT  

Function list

NameSummary
ABS Computes the absolute value ofX.
ACOS Computes the inverse cosine ofX.
ACOSH Computes the inverse hyperbolic cosine ofX.
APPROX_COSINE_DISTANCEComputes the approximate cosine distance between two vectors.
APPROX_DOT_PRODUCT Computes the approximate dot product of two vectors.
APPROX_EUCLIDEAN_DISTANCEComputes the approximate Euclidean distance between two vectors.
ASIN Computes the inverse sine ofX.
ASINH Computes the inverse hyperbolic sine ofX.
ATAN Computes the inverse tangent ofX.
ATAN2 Computes the inverse tangent ofX/Y, using the signs ofX andY to determine the quadrant.
ATANH Computes the inverse hyperbolic tangent ofX.
AVG Gets the average of non-NULL values.
For more information, seeAggregate functions.
CEIL Gets the smallest integral value that isn't less thanX.
CEILING Synonym ofCEIL.
COS Computes the cosine ofX.
COSH Computes the hyperbolic cosine ofX.
COSINE_DISTANCEComputes the cosine distance between two vectors.
DIV Divides integerX by integerY.
DOT_PRODUCTComputes the dot product of two vectors.
EXP Computese to the power ofX.
EUCLIDEAN_DISTANCEComputes the Euclidean distance between two vectors.
FLOOR Gets the largest integral value that isn't greater thanX.
GREATEST Gets the greatest value amongX1,...,XN.
IEEE_DIVIDE DividesX byY, but doesn't generate errors for division by zero or overflow.
IS_INF Checks ifX is positive or negative infinity.
IS_NAN Checks ifX is aNaN value.
LEAST Gets the least value amongX1,...,XN.
LN Computes the natural logarithm ofX.
LOG Computes the natural logarithm ofX or the logarithm ofX to baseY.
LOG10 Computes the natural logarithm ofX to base 10.
MAX Gets the maximum non-NULL value.
For more information, seeAggregate functions.
MOD Gets the remainder of the division ofX byY.
POW Produces the value ofX raised to the power ofY.
POWER Synonym ofPOW.
ROUND RoundsX to the nearest integer or roundsX toN decimal places after the decimal point.
SAFE_ADD Equivalent to the addition operator (X + Y), but returnsNULL if overflow occurs.
SAFE_DIVIDE Equivalent to the division operator (X / Y), but returnsNULL if an error occurs.
SAFE_MULTIPLY Equivalent to the multiplication operator (X * Y), but returnsNULL if overflow occurs.
SAFE_NEGATE Equivalent to the unary minus operator (-X), but returnsNULL if overflow occurs.
SAFE_SUBTRACT Equivalent to the subtraction operator (X - Y), but returnsNULL if overflow occurs.
SIGN Produces -1 , 0, or +1 for negative, zero, and positive arguments respectively.
SIN Computes the sine ofX.
SINH Computes the hyperbolic sine ofX.
SQRT Computes the square root ofX.
SUM Gets the sum of non-NULL values.
For more information, seeAggregate functions.
TAN Computes the tangent ofX.
TANH Computes the hyperbolic tangent ofX.
TRUNC Rounds a number likeROUND(X) orROUND(X, N), but always rounds towards zero and never overflows.

ABS

ABS(X)

Description

Computes absolute value. Returns an error if the argument is an integer and theoutput value can't be represented as the same type; this happens only for thelargest negative input value, which has no positive representation.

XABS(X)
2525
-2525
+inf+inf
-inf+inf

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
OUTPUTINT64NUMERICFLOAT32FLOAT64

ACOS

ACOS(X)

Description

Computes the principal value of the inverse cosine of X. The return value is inthe range [0,π]. Generates an error if X is a value outside of therange [-1, 1].

If X isNUMERICthen, the output isFLOAT64.

XACOS(X)
+infNaN
-infNaN
NaNNaN
X < -1Error
X > 1Error

ACOSH

ACOSH(X)

Description

Computes the inverse hyperbolic cosine of X. Generates an error if X is a valueless than 1.

If X isNUMERICthen, the output isFLOAT64.

XACOSH(X)
+inf+inf
-infNaN
NaNNaN
X < 1Error

APPROX_COSINE_DISTANCE

APPROX_COSINE_DISTANCE(vector1,vector2,options=>value)

Description

Computes the approximatecosine distance between twovectors.

Definitions

  • vector1: A vector that's represented by anARRAY<T> value.
  • vector2: A vector that's represented by anARRAY<T> value.
  • options: A named argument with a value that represents aSpanner-specific optimization.value must be the following:

    • JSON'{"num_leaves_to_search": INT}'

    This option specifies the approximate nearest neighbors (ANN) algorithmconfiguration used in your query. The total number of leaves is specifiedwhen you create your vector index. For this argument, we recommend usinga number that's 1% the total number of leaves defined in theCREATE VECTOR INDEX statement. The number of leaves to search is definedby thenum_leaves_to_search option for both 2-level and 3-level trees.

    If an unsupported option is provided, an error is produced.

Details

APPROX_COSINE_DISTANCE approximates theCOSINE_DISTANCE between the given vectors. Approximationtypically occurs when using specific indexing strategies that precomputeclustering.

Query results across invocations aren't guaranteed to repeat.

You can add a filter such asWHERE s.id = 42 to your query. However, thatmight lead to poor recall problems because theWHERE filter happens afterinternal limits are applied. To mitigate this issue, you can increase thevalue of thenum_of_leaves_to_search option.

  • ARRAY<T> can be used to represent a vector. Each zero-based index in thisarray represents a dimension. The value for each element in this arrayrepresents a magnitude.

    T can represent the following and must be the same for bothvectors:

    • FLOAT32
    • FLOAT64

    In the following example vector, there are four dimensions. The magnitudeis10.0 for dimension0,55.0 for dimension1,40.0 fordimension2, and34.0 for dimension3:

    [10.0,55.0,40.0,34.0]
  • Both vectorsin this function must share the same dimensions, and if they don't, an erroris produced.

  • A vector can't be a zero vector. A vector is a zero vector if it hasno dimensions or all dimensions have a magnitude of0, such as[] or[0.0, 0.0]. If a zero vector is encountered, an error is produced.

  • An error is produced if a magnitude in a vector isNULL.

  • If a vector isNULL,NULL is returned.

Limitations

  • The function can only be used to sort vectors in a table with anORDER BYclause.
  • The function output must be the only ordering key in theORDER BY clause.
  • TheORDER BY clause must be followed by aLIMIT clause.
  • One of the function arguments must directly reference an embedding column,and the other must be a constant expression, such as a query parameterreference.
  • You can't use the function in the following ways:

    • In aWHERE,ON, orGROUP BY clause.

    • In aSELECT clause unless it's for ordering results in a laterORDER BY clause.

    • As the input of another expression.

Return type

FLOAT64

Examples

In the following example, vectors are used to compute theapproximate cosine distance:

In the following example, up to 1000 leaves in the vector index are searched toproduce the approximate nearest two vectors using cosine distance:

SELECTFirstName,LastNameFROMSingers@{FORCE_INDEX=Singer_vector_index}ASsORDERBYAPPROX_COSINE_DISTANCE(@queryVector,s.embedding,options=>JSON'{"num_leaves_to_search": 1000}')LIMIT2;/*-----------+------------+ | FirstName | LastName   | +-----------+------------+ | Marc      | Richards   | | Catalina  | Smith      | +-----------+------------*/

APPROX_DOT_PRODUCT

APPROX_DOT_PRODUCT(vector1,vector2,options=>value)

Description

Computes the approximatedot product of two vectors.

Definitions

  • vector1: A vector that's represented by anARRAY<T> value.
  • vector2: A vector that's represented by anARRAY<T> value.
  • options: A named argument with a value that represents aSpanner-specific optimization.value must be the following:

    • JSON'{"num_leaves_to_search": INT}'

    This option specifies the approximate nearest neighbors (ANN) algorithmconfiguration used in your query. The total number of leaves is specifiedwhen you create your vector index. For this argument, we recommend usinga number that's 1% the total number of leaves defined in theCREATE VECTOR INDEX statement. The number of leaves to search is definedby thenum_leaves_to_search option for both 2-level and 3-level trees.

    If an unsupported option is provided, an error is produced.

Details

APPROX_DOT_PRODUCT approximates theDOT_PRODUCT between twovectors. Approximation typically occurs when using specific indexing strategiesthat precompute clustering.

Query results across invocations aren't guaranteed to repeat.

You can add a filter such asWHERE s.id = 42 to your query. However, thatmight lead to poor recall problems because theWHERE filter happens afterinternal limits are applied. To mitigate this issue, you can increase thevalue of thenum_of_leaves_to_search option.

  • ARRAY<T> can be used to represent a vector. Each zero-based index in thisarray represents a dimension. The value for each element in this arrayrepresents a magnitude.

    T can represent the following and must be the same for bothvectors:

    • INT64
    • FLOAT32
    • FLOAT64

    In the following example vector, there are four dimensions. The magnitudeis10.0 for dimension0,55.0 for dimension1,40.0 fordimension2, and34.0 for dimension3:

    [10.0,55.0,40.0,34.0]
  • Both vectorsin this function must share the same dimensions, and if they don't, an erroris produced.

  • A vector can be a zero vector. A vector is a zero vector if it hasno dimensions or all dimensions have a magnitude of0, such as[] or[0.0, 0.0].

  • An error is produced if a magnitude in a vector isNULL.

  • If a vector isNULL,NULL is returned.

Limitations

  • The function can only be used to sort vectors in a table with anORDER BYclause.
  • The function output must be the only ordering key in theORDER BY clause.
  • TheORDER BY clause must be followed by aLIMIT clause.
  • One of the function arguments must directly reference an embedding column,and the other must be a constant expression, such as a query parameterreference.
  • You can't use the function in the following ways:

    • In aWHERE,ON, orGROUP BY clause.

    • In aSELECT clause unless it's for ordering results in a laterORDER BY clause.

    • As the input of another expression.

Return type

FLOAT64

Examples

In the following example, up to 1000 leaves in the vector index are searched toproduce the approximate nearest two vectors using dot product distance:

SELECTFirstName,LastNameFROMSingers@{FORCE_INDEX=Singer_vector_index}ASsORDERBYAPPROX_DOT_PRODUCT(@queryVector,s.embedding,options=>JSON'{"num_leaves_to_search": 1000}')DESCLIMIT2;/*-----------+------------+ | FirstName | LastName   | +-----------+------------+ | Marc      | Richards   | | Catalina  | Smith      | +-----------+------------*/

APPROX_EUCLIDEAN_DISTANCE

APPROX_EUCLIDEAN_DISTANCE(vector1,vector2,options=>value)

Description

Computes the approximateEuclidean distance betweentwo vectors.

Definitions

  • vector1: A vector that's represented by anARRAY<T> value.
  • vector2: A vector that's represented by anARRAY<T> value.
  • options: A named argument with a value that represents aSpanner-specific optimization.value must be the following:

    • JSON'{"num_leaves_to_search": INT}'

    This option specifies the approximate nearest neighbors (ANN) algorithmconfiguration used in your query. The total number of leaves is specifiedwhen you create your vector index. For this argument, we recommend usinga number that's 1% the total number of leaves defined in theCREATE VECTOR INDEX statement. The number of leaves to search is definedby thenum_leaves_to_search option for both 2-level and 3-level trees.

    If an unsupported option is provided, an error is produced.

Details

APPROX_EUCLIDEAN_DISTANCE approximates theEUCLIDEAN_DISTANCE between two vectors. Approximationtypically occurs when using specific indexing strategies that precomputeclustering.

Query results across invocations aren't guaranteed to repeat.

You can add a filter such asWHERE s.id = 42 to your query. However, thatmight lead to poor recall problems because theWHERE filter happens afterinternal limits are applied. To mitigate this issue, you can increase thevalue of thenum_of_leaves_to_search option.

  • ARRAY<T> can be used to represent a vector. Each zero-based index in thisarray represents a dimension. The value for each element in this arrayrepresents a magnitude.

    T can represent the following and must be the same for bothvectors:

    • FLOAT32
    • FLOAT64

    In the following example vector, there are four dimensions. The magnitudeis10.0 for dimension0,55.0 for dimension1,40.0 fordimension2, and34.0 for dimension3:

    [10.0,55.0,40.0,34.0]
  • Both vectorsin this function must share the same dimensions, and if they don't, an erroris produced.

  • A vector can be a zero vector. A vector is a zero vector if it hasno dimensions or all dimensions have a magnitude of0, such as[] or[0.0, 0.0].

  • An error is produced if a magnitude in a vector isNULL.

  • If a vector isNULL,NULL is returned.

Limitations

  • The function can only be used to sort vectors in a table with anORDER BYclause.
  • The function output must be the only ordering key in theORDER BY clause.
  • TheORDER BY clause must be followed by aLIMIT clause.
  • One of the function arguments must directly reference an embedding column,and the other must be a constant expression, such as a query parameterreference.
  • You can't use the function in the following ways:

    • In aWHERE,ON, orGROUP BY clause.

    • In aSELECT clause unless it's for ordering results in a laterORDER BY clause.

    • As the input of another expression.

Return type

FLOAT64

Examples

In the following example, vectors are used to compute theapproximate Euclidean distance:

In the following example, up to 1000 leaves in the vector index are searched toproduce the approximate nearest two vectors using Euclidean distance:

SELECTFirstName,LastNameFROMSingers@{FORCE_INDEX=Singer_vector_index}ASsORDERBYAPPROX_EUCLIDEAN_DISTANCE(@queryVector,0.1],s.embedding,options=>JSON'{"num_leaves_to_search": 1000}')LIMIT2;/*-----------+------------+ | FirstName | LastName   | +-----------+------------+ | Marc      | Richards   | | Catalina  | Smith      | +-----------+------------*/

ASIN

ASIN(X)

Description

Computes the principal value of the inverse sine of X. The return value is inthe range [-π/2,π/2]. Generates an error if X is outside ofthe range [-1, 1].

If X isNUMERICthen, the output isFLOAT64.

XASIN(X)
+infNaN
-infNaN
NaNNaN
X < -1Error
X > 1Error

ASINH

ASINH(X)

Description

Computes the inverse hyperbolic sine of X. Doesn't fail.

If X isNUMERICthen, the output isFLOAT64.

XASINH(X)
+inf+inf
-inf-inf
NaNNaN

ATAN

ATAN(X)

Description

Computes the principal value of the inverse tangent of X. The return value isin the range [-π/2,π/2]. Doesn't fail.

If X isNUMERICthen, the output isFLOAT64.

XATAN(X)
+infπ/2
-inf-π/2
NaNNaN

ATAN2

ATAN2(X,Y)

Description

Calculates the principal value of the inverse tangent of X/Y using the signs ofthe two arguments to determine the quadrant. The return value is in the range[-π,π].

If Y isNUMERICthen, the output isFLOAT64.

XYATAN2(X, Y)
NaNAny valueNaN
Any valueNaNNaN
0.00.00.0
Positive Finite value-infπ
Negative Finite value-inf
Finite value+inf0.0
+infFinite valueπ/2
-infFinite value-π/2
+inf-inf¾π
-inf-inf-¾π
+inf+infπ/4
-inf+inf-π/4

ATANH

ATANH(X)

Description

Computes the inverse hyperbolic tangent of X. Generates an error if X is outsideof the range (-1, 1).

If X isNUMERICthen, the output isFLOAT64.

XATANH(X)
+infNaN
-infNaN
NaNNaN
X < -1Error
X > 1Error

CEIL

CEIL(X)

Description

Returns the smallest integral value that isn't less than X.

XCEIL(X)
2.02.0
2.33.0
2.83.0
2.53.0
-2.3-2.0
-2.8-2.0
-2.5-2.0
00
+inf+inf
-inf-inf
NaNNaN

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
OUTPUTFLOAT64NUMERICFLOAT64FLOAT64

CEILING

CEILING(X)

Description

Synonym of CEIL(X)

COS

COS(X)

Description

Computes the cosine of X where X is specified in radians. Never fails.

XCOS(X)
+infNaN
-infNaN
NaNNaN

COSH

COSH(X)

Description

Computes the hyperbolic cosine of X where X is specified in radians.Generates an error if overflow occurs.

If X isNUMERICthen, the output isFLOAT64.

XCOSH(X)
+inf+inf
-inf+inf
NaNNaN

COSINE_DISTANCE

COSINE_DISTANCE(vector1,vector2)

Description

Computes thecosine distance between two vectors.

Definitions

  • vector1: A vector that's represented by anARRAY<T> value.
  • vector2: A vector that's represented by anARRAY<T> value.

Details

  • ARRAY<T> can be used to represent a vector. Each zero-based index in thisarray represents a dimension. The value for each element in this arrayrepresents a magnitude.

    T can represent the following and must be the same for bothvectors:

    • FLOAT32
    • FLOAT64

    In the following example vector, there are four dimensions. The magnitudeis10.0 for dimension0,55.0 for dimension1,40.0 fordimension2, and34.0 for dimension3:

    [10.0,55.0,40.0,34.0]
  • Both vectorsin this function must share the same dimensions, and if they don't, an erroris produced.

  • A vector can't be a zero vector. A vector is a zero vector if it hasno dimensions or all dimensions have a magnitude of0, such as[] or[0.0, 0.0]. If a zero vector is encountered, an error is produced.

  • An error is produced if a magnitude in a vector isNULL.

  • If a vector isNULL,NULL is returned.

Return type

FLOAT64

Examples

In the following example,vectorsare used to compute the cosine distance:

SELECTCOSINE_DISTANCE([1.0,2.0],[3.0,4.0])ASresults;/*----------+ | results  | +----------+ | 0.016130 | +----------*/

The ordering of numeric values in a vector doesn't impact the resultsproduced by this function. For example these queries produce the same resultseven though the numeric values in each vector is in a different order:

SELECTCOSINE_DISTANCE([1.0,2.0],[3.0,4.0])ASresults;
SELECTCOSINE_DISTANCE([2.0,1.0],[4.0,3.0])ASresults;
/*----------+  | results  |  +----------+  | 0.016130 |  +----------*/

In the following example, the function can't compute cosine distance againstthe first vector, which is a zero vector:

-- ERRORSELECTCOSINE_DISTANCE([0.0,0.0],[3.0,4.0])ASresults;

Both vectors must have the samedimensions. If not, an error is produced. In the following example, thefirst vector has two dimensions and the second vector has three:

-- ERRORSELECTCOSINE_DISTANCE([9.0,7.0],[8.0,4.0,5.0])ASresults;

DIV

DIV(X,Y)

Description

Returns the result of integer division of X by Y. Division by zero returnsan error. Division by -1 may overflow. Ifboth inputs areNUMERIC and the result is overflow,then it returns anumeric overflow error.

XYDIV(X, Y)
2045
12-7-1
2036
0200
200Error

Return Data Type

The return data type is determined by the argument types with the followingtable.

INPUTINT64NUMERIC
INT64INT64NUMERIC
NUMERICNUMERICNUMERIC

DOT_PRODUCT

DOT_PRODUCT(vector1,vector2)

Description

Computes thedot product of two vectors. Thedot product is computed by summing the product of correspondingvector elements.

Definitions

  • vector1: A vector that's represented by anARRAY<T> value.
  • vector2: A vector that's represented by anARRAY<T> value.

Details

  • ARRAY<T> can be used to represent a vector. Each zero-based index in thisarray represents a dimension. The value for each element in this arrayrepresents a magnitude.

    T can represent the following and must be the same for bothvectors:

    • INT64
    • FLOAT32
    • FLOAT64

    In the following example vector, there are four dimensions. The magnitudeis10.0 for dimension0,55.0 for dimension1,40.0 fordimension2, and34.0 for dimension3:

    [10.0,55.0,40.0,34.0]
  • Both vectorsin this function must share the same dimensions, and if they don't, an erroris produced.

  • A vector can be a zero vector. A vector is a zero vector if it hasno dimensions or all dimensions have a magnitude of0, such as[] or[0.0, 0.0].

  • An error is produced if a magnitude in a vector isNULL.

  • If a vector isNULL,NULL is returned.

Return type

FLOAT64

Examples

SELECTDOT_PRODUCT([100],[200])ASresults/*---------+ | results | +---------+ | 20000   | +---------*/
SELECTDOT_PRODUCT([100,10],[200,6])ASresults/*---------+ | results | +---------+ | 20060   | +---------*/
SELECTDOT_PRODUCT([100,10,1],[200,6,2])ASresults/*---------+ | results | +---------+ | 20062   | +---------*/
SELECTDOT_PRODUCT([],[])ASresults/*---------+ | results | +---------+ | 0       | +---------*/

EXP

EXP(X)

Description

Computese to the power of X, also called the natural exponential function. Ifthe result underflows, this function returns a zero. Generates an error if theresult overflows.

XEXP(X)
0.01.0
+inf+inf
-inf0.0

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
OUTPUTFLOAT64NUMERICFLOAT64FLOAT64

EUCLIDEAN_DISTANCE

EUCLIDEAN_DISTANCE(vector1,vector2)

Description

Computes theEuclidean distance between two vectors.

Definitions

  • vector1: A vector that's represented by anARRAY<T> value.
  • vector2: A vector that's represented by anARRAY<T> value.

Details

  • ARRAY<T> can be used to represent a vector. Each zero-based index in thisarray represents a dimension. The value for each element in this arrayrepresents a magnitude.

    T can represent the following and must be the same for bothvectors:

    • FLOAT32
    • FLOAT64

    In the following example vector, there are four dimensions. The magnitudeis10.0 for dimension0,55.0 for dimension1,40.0 fordimension2, and34.0 for dimension3:

    [10.0,55.0,40.0,34.0]
  • Both vectorsin this function must share the same dimensions, and if they don't, an erroris produced.

  • A vector can be a zero vector. A vector is a zero vector if it hasno dimensions or all dimensions have a magnitude of0, such as[] or[0.0, 0.0].

  • An error is produced if a magnitude in a vector isNULL.

  • If a vector isNULL,NULL is returned.

Return type

FLOAT64

Examples

In the following example, vectorsare used to compute the Euclidean distance:

SELECTEUCLIDEAN_DISTANCE([1.0,2.0],[3.0,4.0])ASresults;/*----------+ | results  | +----------+ | 2.828    | +----------*/

The ordering of magnitudes in a vector doesn't impact the resultsproduced by this function. For example these queries produce the same resultseven though the magnitudes in each vector is in a different order:

SELECTEUCLIDEAN_DISTANCE([1.0,2.0],[3.0,4.0]);
SELECTEUCLIDEAN_DISTANCE([2.0,1.0],[4.0,3.0]);
/*----------+  | results  |  +----------+  | 2.828    |  +----------*/

Both vectors must have the samedimensions. If not, an error is produced. In the following example, the firstvector has two dimensions and the second vector has three:

-- ERRORSELECTEUCLIDEAN_DISTANCE([9.0,7.0],[8.0,4.0,5.0])ASresults;

FLOOR

FLOOR(X)

Description

Returns the largest integral value that isn't greater than X.

XFLOOR(X)
2.02.0
2.32.0
2.82.0
2.52.0
-2.3-3.0
-2.8-3.0
-2.5-3.0
00
+inf+inf
-inf-inf
NaNNaN

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
OUTPUTFLOAT64NUMERICFLOAT64FLOAT64

GREATEST

GREATEST(X1,...,XN)

Description

Returns the greatest value amongX1,...,XN. If any argument isNULL, returnsNULL. Otherwise, in the case of floating-point arguments, if any argument isNaN, returnsNaN. In all other cases, returns the value amongX1,...,XNthat has the greatest value according to the ordering used by theORDER BYclause. The argumentsX1, ..., XN must be coercible to a common supertype, andthe supertype must support ordering.

X1,...,XNGREATEST(X1,...,XN)
3,5,15

Return Data Types

Data type of the input values.

IEEE_DIVIDE

IEEE_DIVIDE(X,Y)

Description

Divides X by Y; this function never fails. ReturnsFLOAT64 unlessboth X and Y areFLOAT32, in which case it returnsFLOAT32. Unlike the division operator (/),this function doesn't generate errors for division by zero or overflow.

XYIEEE_DIVIDE(X, Y)
20.04.05.0
20.06.03.3333333333333335
0.025.00.0
25.00.0+inf
-25.00.0-inf
25.0-0.0-inf
0.00.0NaN
0.0NaNNaN
NaN0.0NaN
+inf+infNaN
-inf-infNaN

IS_INF

IS_INF(X)

Description

ReturnsTRUE if the value is positive or negative infinity.

ReturnsFALSE forNUMERICinputs sinceNUMERIC can't beINF.

XIS_INF(X)
+infTRUE
-infTRUE
25FALSE

IS_NAN

IS_NAN(X)

Description

ReturnsTRUE if the value is aNaN value.

ReturnsFALSE forNUMERIC inputs sinceNUMERIC can't beNaN.

XIS_NAN(X)
NaNTRUE
25FALSE

LEAST

LEAST(X1,...,XN)

Description

Returns the least value amongX1,...,XN. If any argument isNULL, returnsNULL. Otherwise, in the case of floating-point arguments, if any argument isNaN, returnsNaN. In all other cases, returns the value amongX1,...,XNthat has the least value according to the ordering used by theORDER BYclause. The argumentsX1, ..., XN must be coercible to a common supertype, andthe supertype must support ordering.

X1,...,XNLEAST(X1,...,XN)
3,5,11

Return Data Types

Data type of the input values.

LN

LN(X)

Description

Computes the natural logarithm of X. Generates an error if X is less than orequal to zero.

XLN(X)
1.00.0
+inf+inf
X <= 0Error

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
OUTPUTFLOAT64NUMERICFLOAT64FLOAT64

LOG

LOG(X[,Y])

Description

If only X is present,LOG is a synonym ofLN. If Y is also present,LOG computes the logarithm of X to base Y.

XYLOG(X, Y)
100.010.02.0
-infAny valueNaN
Any value+infNaN
+inf0.0 < Y < 1.0-inf
+infY > 1.0+inf
X <= 0Any valueError
Any valueY <= 0Error
Any value1.0Error

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
INT64FLOAT64NUMERICFLOAT64FLOAT64
NUMERICNUMERICNUMERICFLOAT64FLOAT64
FLOAT32FLOAT64FLOAT64FLOAT64FLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

LOG10

LOG10(X)

Description

Similar toLOG, but computes logarithm to base 10.

XLOG10(X)
100.02.0
-infNaN
+inf+inf
X <= 0Error

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
OUTPUTFLOAT64NUMERICFLOAT64FLOAT64

MOD

MOD(X,Y)

Description

Modulo function: returns the remainder of the division of X by Y. Returnedvalue has the same sign as X. An error is generated if Y is 0.

XYMOD(X, Y)
25121
250Error

Return Data Type

The return data type is determined by the argument types with the followingtable.

INPUTINT64NUMERIC
INT64INT64NUMERIC
NUMERICNUMERICNUMERIC

POW

POW(X,Y)

Description

Returns the value of X raised to the power of Y. If the result underflows andisn't representable, then the function returns a value of zero.

XYPOW(X, Y)
2.03.08.0
1.0Any value includingNaN1.0
Any value includingNaN01.0
-1.0+inf1.0
-1.0-inf1.0
ABS(X) < 1-inf+inf
ABS(X) > 1-inf0.0
ABS(X) < 1+inf0.0
ABS(X) > 1+inf+inf
-infY < 00.0
-infY > 0-inf if Y is an odd integer,+inf otherwise
+infY < 00
+infY > 0+inf
Finite value < 0Non-integerError
0Finite value < 0Error

Return Data Type

The return data type is determined by the argument types with the followingtable.

INPUTINT64NUMERICFLOAT32FLOAT64
INT64FLOAT64NUMERICFLOAT64FLOAT64
NUMERICNUMERICNUMERICFLOAT64FLOAT64
FLOAT32FLOAT64FLOAT64FLOAT64FLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

POWER

POWER(X,Y)

Description

Synonym ofPOW(X, Y).

ROUND

ROUND(X[,N])

Description

If only X is present, rounds X to the nearest integer. If N is present,rounds X to N decimal places after the decimal point. If N is negative,rounds off digits to the left of the decimal point. Rounds halfway casesaway from zero. Generates an error if overflow occurs.

ExpressionReturn Value
ROUND(2.0)2.0
ROUND(2.3)2.0
ROUND(2.8)3.0
ROUND(2.5)3.0
ROUND(-2.3)-2.0
ROUND(-2.8)-3.0
ROUND(-2.5)-3.0
ROUND(0)0
ROUND(+inf)+inf
ROUND(-inf)-inf
ROUND(NaN)NaN
ROUND(123.7, -1)120.0
ROUND(1.235, 2)1.24

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
OUTPUTFLOAT64NUMERICFLOAT64FLOAT64

SAFE_ADD

SAFE_ADD(X,Y)

Description

Equivalent to the addition operator (+), but returnsNULL if overflow occurs.

XYSAFE_ADD(X, Y)
549

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
INT64INT64NUMERICFLOAT64FLOAT64
NUMERICNUMERICNUMERICFLOAT64FLOAT64
FLOAT32FLOAT64FLOAT64FLOAT64FLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

SAFE_DIVIDE

SAFE_DIVIDE(X,Y)

Description

Equivalent to the division operator (X / Y), but returnsNULL if an error occurs, such as a division by zero error.

XYSAFE_DIVIDE(X, Y)
2045
0200
200NULL

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
INT64FLOAT64NUMERICFLOAT64FLOAT64
NUMERICNUMERICNUMERICFLOAT64FLOAT64
FLOAT32FLOAT64FLOAT64FLOAT64FLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

SAFE_MULTIPLY

SAFE_MULTIPLY(X,Y)

Description

Equivalent to the multiplication operator (*), but returnsNULL if overflow occurs.

XYSAFE_MULTIPLY(X, Y)
20480

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
INT64INT64NUMERICFLOAT64FLOAT64
NUMERICNUMERICNUMERICFLOAT64FLOAT64
FLOAT32FLOAT64FLOAT64FLOAT64FLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

SAFE_NEGATE

SAFE_NEGATE(X)

Description

Equivalent to the unary minus operator (-), but returnsNULL if overflow occurs.

XSAFE_NEGATE(X)
+1-1
-1+1
00

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
OUTPUTINT64NUMERICFLOAT32FLOAT64

SAFE_SUBTRACT

SAFE_SUBTRACT(X,Y)

Description

Returns the result of Y subtracted from X.Equivalent to the subtraction operator (-), but returnsNULL if overflow occurs.

XYSAFE_SUBTRACT(X, Y)
541

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
INT64INT64NUMERICFLOAT64FLOAT64
NUMERICNUMERICNUMERICFLOAT64FLOAT64
FLOAT32FLOAT64FLOAT64FLOAT64FLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

SIGN

SIGN(X)

Description

Returns-1,0, or+1 for negative, zero and positive argumentsrespectively. For floating point arguments, this function doesn't distinguishbetween positive and negative zero.

XSIGN(X)
25+1
00
-25-1
NaNNaN

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
OUTPUTINT64NUMERICFLOAT32FLOAT64

SIN

SIN(X)

Description

Computes the sine of X where X is specified in radians. Never fails.

XSIN(X)
+infNaN
-infNaN
NaNNaN

SINH

SINH(X)

Description

Computes the hyperbolic sine of X where X is specified in radians. Generatesan error if overflow occurs.

If X isNUMERICthen, the output isFLOAT64.

XSINH(X)
+inf+inf
-inf-inf
NaNNaN

SQRT

SQRT(X)

Description

Computes the square root of X. Generates an error if X is less than 0.

XSQRT(X)
25.05.0
+inf+inf
X < 0Error

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
OUTPUTFLOAT64NUMERICFLOAT64FLOAT64

TAN

TAN(X)

Description

Computes the tangent of X where X is specified in radians. Generates an error ifoverflow occurs.

XTAN(X)
+infNaN
-infNaN
NaNNaN

TANH

TANH(X)

Description

Computes the hyperbolic tangent of X where X is specified in radians. Doesn'tfail.

If X isNUMERICthen, the output isFLOAT64.

XTANH(X)
+inf1.0
-inf-1.0
NaNNaN

TRUNC

TRUNC(X[,N])

Description

If only X is present,TRUNC rounds X to the nearest integer whose absolutevalue isn't greater than the absolute value of X. If N is also present,TRUNCbehaves likeROUND(X, N), but always rounds towards zero and never overflows.

XTRUNC(X)
2.02.0
2.32.0
2.82.0
2.52.0
-2.3-2.0
-2.8-2.0
-2.5-2.0
00
+inf+inf
-inf-inf
NaNNaN

Return Data Type

INPUTINT64NUMERICFLOAT32FLOAT64
OUTPUTFLOAT64NUMERICFLOAT64FLOAT64

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-12-15 UTC.