123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418 |
- [role="xpack"]
- [testenv="basic"]
- [[sql-functions]]
- == Functions and Operators
- {es-sql} provides a number of built-in operators and functions.
- === Comparison Operators
- {es-sql} supports the following comparison operators:
- * Equality (`=`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/filter.sql-spec[whereFieldEquality]
- --------------------------------------------------
- * Inequality (`<>` or `!=` or `<=>`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/filter.sql-spec[whereFieldNonEquality]
- --------------------------------------------------
- * Comparison (`<`, `<=`, `>`, `>=`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/filter.sql-spec[whereFieldLessThan]
- --------------------------------------------------
- * `BETWEEN`
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/filter.sql-spec[whereBetween]
- --------------------------------------------------
- * `IS NULL`/`IS NOT NULL`
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/filter.sql-spec[whereIsNotNullAndIsNull]
- --------------------------------------------------
- === Logical Operators
- {es-sql} supports the following logical operators:
- * `AND`
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/filter.sql-spec[whereFieldAndComparison]
- --------------------------------------------------
- * `OR`
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/filter.sql-spec[whereFieldOrComparison]
- --------------------------------------------------
- * `NOT`
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/filter.sql-spec[whereFieldEqualityNot]
- --------------------------------------------------
- === Math Operators
- {es-sql} supports the following math operators:
- * Add (`+`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/arithmetic.sql-spec[plus]
- --------------------------------------------------
- * Subtract (infix `-`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/arithmetic.sql-spec[minus]
- --------------------------------------------------
- * Negate (unary `-`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/arithmetic.sql-spec[unaryMinus]
- --------------------------------------------------
- * Multiply (`*`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/arithmetic.sql-spec[multiply]
- --------------------------------------------------
- * Divide (`/`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/arithmetic.sql-spec[divide]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Modulo_operation[Modulo] or Reminder(`%`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/arithmetic.sql-spec[mod]
- --------------------------------------------------
- === Math Functions
- All math and trigonometric functions require their input (where applicable)
- to be numeric.
- ==== Generic
- * `ABS`
- https://en.wikipedia.org/wiki/Absolute_value[Absolute value], returns \[same type as input]
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[abs]
- --------------------------------------------------
- * `CBRT`
- https://en.wikipedia.org/wiki/Cube_root[Cube root], returns `double`
- // TODO make the example in the tests presentable
- * `CEIL`
- https://en.wikipedia.org/wiki/Floor_and_ceiling_functions[Ceiling], returns `double`
- * `CEILING`
- Same as `CEIL`
- // TODO make the example in the tests presentable
- * `E`
- https://en.wikipedia.org/wiki/E_%28mathematical_constant%29[Euler's number], returns `2.7182818284590452354`
- * https://en.wikipedia.org/wiki/Rounding#Round_half_up[Round] (`ROUND`)
- // TODO make the example in the tests presentable
- NOTE: This rounds "half up" meaning that `ROUND(-1.5)` results in `-1`.
- * https://en.wikipedia.org/wiki/Floor_and_ceiling_functions[Floor] (`FLOOR`)
- // TODO make the example in the tests presentable
- * https://en.wikipedia.org/wiki/Natural_logarithm[Natural logarithm] (`LOG`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[log]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Logarithm[Logarithm] base 10 (`LOG10`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[log10]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Square_root[Square root] (`SQRT`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[sqrt]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Exponential_function[e^x^] (`EXP`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[exp]
- --------------------------------------------------
- * https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#expm1-double-[e^x^ - 1] (`EXPM1`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[expm1]
- --------------------------------------------------
- ==== Trigonometric
- * Convert from https://en.wikipedia.org/wiki/Radian[radians]
- to https://en.wikipedia.org/wiki/Degree_(angle)[degrees] (`DEGREES`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[degrees]
- --------------------------------------------------
- * Convert from https://en.wikipedia.org/wiki/Degree_(angle)[degrees]
- to https://en.wikipedia.org/wiki/Radian[radians] (`RADIANS`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[degrees]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Trigonometric_functions#sine[Sine] (`SIN`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[sin]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Trigonometric_functions#cosine[Cosine] (`COS`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[cos]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Trigonometric_functions#tangent[Tangent] (`TAN`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[tan]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Inverse_trigonometric_functions[Arc sine] (`ASIN`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[asin]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Inverse_trigonometric_functions[Arc cosine] (`ACOS`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[acos]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Inverse_trigonometric_functions[Arc tangent] (`ATAN`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[atan]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Hyperbolic_function[Hyperbolic sine] (`SINH`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[sinh]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Hyperbolic_function[Hyperbolic cosine] (`COSH`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/math.sql-spec[cosh]
- --------------------------------------------------
- [[sql-functions-datetime]]
- === Date and Time Functions
- * Extract the year from a date (`YEAR`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/datetime.csv-spec[year]
- --------------------------------------------------
- * Extract the month of the year from a date (`MONTH_OF_YEAR` or `MONTH`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/datetime.csv-spec[monthOfYear]
- --------------------------------------------------
- * Extract the week of the year from a date (`WEEK_OF_YEAR` or `WEEK`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/datetime.csv-spec[weekOfYear]
- --------------------------------------------------
- * Extract the day of the year from a date (`DAY_OF_YEAR` or `DOY`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/datetime.csv-spec[dayOfYear]
- --------------------------------------------------
- * Extract the day of the month from a date (`DAY_OF_MONTH`, `DOM`, or `DAY`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/datetime.csv-spec[dayOfMonth]
- --------------------------------------------------
- * Extract the day of the week from a date (`DAY_OF_WEEK` or `DOW`).
- Monday is `1`, Tuesday is `2`, etc.
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/datetime.csv-spec[dayOfWeek]
- --------------------------------------------------
- * Extract the hour of the day from a date (`HOUR_OF_DAY` or `HOUR`).
- Monday is `1`, Tuesday is `2`, etc.
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/datetime.csv-spec[hourOfDay]
- --------------------------------------------------
- * Extract the minute of the day from a date (`MINUTE_OF_DAY`).
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/datetime.csv-spec[minuteOfDay]
- --------------------------------------------------
- * Extract the minute of the hour from a date (`MINUTE_OF_HOUR`, `MINUTE`).
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/datetime.csv-spec[minuteOfHour]
- --------------------------------------------------
- * Extract the second of the minute from a date (`SECOND_OF_MINUTE`, `SECOND`).
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/datetime.csv-spec[secondOfMinute]
- --------------------------------------------------
- * Extract
- As an alternative, one can support `EXTRACT` to extract fields from datetimes.
- You can run any <<sql-functions-datetime,datetime function>>
- with `EXTRACT(<datetime_function> FROM <expression>)`. So
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/datetime.csv-spec[extractDayOfYear]
- --------------------------------------------------
- is the equivalent to
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/datetime.csv-spec[dayOfYear]
- --------------------------------------------------
- [[sql-functions-aggregate]]
- === Aggregate Functions
- ==== Basic
- * https://en.wikipedia.org/wiki/Arithmetic_mean[Average] (`AVG`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/agg.sql-spec[avg]
- --------------------------------------------------
- * Count the number of matching fields (`COUNT`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/agg.sql-spec[countStar]
- --------------------------------------------------
- * Count the number of distinct values in matching documents (`COUNT(DISTINCT`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/agg.sql-spec[countDistinct]
- --------------------------------------------------
- * Find the maximum value in matching documents (`MAX`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/agg.sql-spec[max]
- --------------------------------------------------
- * Find the minimum value in matching documents (`MIN`)
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/agg.sql-spec[min]
- --------------------------------------------------
- * https://en.wikipedia.org/wiki/Kahan_summation_algorithm[Sum]
- all values of matching documents (`SUM`).
- ["source","sql",subs="attributes,callouts,macros"]
- --------------------------------------------------
- include-tagged::{sql-specs}/agg.csv-spec[sum]
- --------------------------------------------------
|