opensearch-docs-cn/_search-plugins/sql/functions.md

8.8 KiB

layout title parent nav_order redirect_from
default Functions SQL 10 /docs/sql/functions/

Functions

You must enable fielddata in the document mapping for most string functions to work properly.

The specification shows the return type of the function with a generic type T as the argument. For example, abs(number T) -> T means that the function abs accepts a numerical argument of type T, which could be any sub-type of the number type, and it returns the actual type of T as the return type.

The SQL plugin supports the following functions.

Mathematical

Function Specification Example
abs abs(number T) -> T SELECT abs(0.5) FROM my-index LIMIT 1
add add(number T, number) -> T SELECT add(1, 5) FROM my-index LIMIT 1
cbrt cbrt(number T) -> T SELECT cbrt(0.5) FROM my-index LIMIT 1
ceil ceil(number T) -> T SELECT ceil(0.5) FROM my-index LIMIT 1
conv conv(string T, int a, int b) -> T SELECT CONV('12', 10, 16), CONV('2C', 16, 10), CONV(12, 10, 2), CONV(1111, 2, 10) FROM my-index LIMIT 1
crc32 crc32(string T) -> T SELECT crc32('MySQL') FROM my-index LIMIT 1
divide divide(number T, number) -> T SELECT divide(1, 0.5) FROM my-index LIMIT 1
e e() -> double SELECT e() FROM my-index LIMIT 1
exp exp(number T) -> T SELECT exp(0.5) FROM my-index LIMIT 1
expm1 expm1(number T) -> T SELECT expm1(0.5) FROM my-index LIMIT 1
floor floor(number T) -> T SELECT floor(0.5) AS Rounded_Down FROM my-index LIMIT 1
ln ln(number T) -> double SELECT ln(10) FROM my-index LIMIT 1
log log(number T) -> double or log(number T, number) -> double SELECT log(10) FROM my-index LIMIT 1
log2 log2(number T) -> double SELECT log2(10) FROM my-index LIMIT 1
log10 log10(number T) -> double SELECT log10(10) FROM my-index LIMIT 1
mod mod(number T, number) -> T SELECT modulus(2, 3) FROM my-index LIMIT 1
multiply multiply(number T, number) -> number SELECT multiply(2, 3) FROM my-index LIMIT 1
pi pi() -> double SELECT pi() FROM my-index LIMIT 1
pow pow(number T) -> T or pow(number T, number) -> T SELECT pow(2, 3) FROM my-index LIMIT 1
power power(number T) -> T or power(number T, number) -> T SELECT power(2, 3) FROM my-index LIMIT 1
rand rand() -> number or rand(number T) -> T SELECT rand(0.5) FROM my-index LIMIT 1
rint rint(number T) -> T SELECT rint(1.5) FROM my-index LIMIT 1
round round(number T) -> T SELECT round(1.5) FROM my-index LIMIT 1
sign sign(number T) -> T SELECT sign(1.5) FROM my-index LIMIT 1
signum signum(number T) -> T SELECT signum(0.5) FROM my-index LIMIT 1
sqrt sqrt(number T) -> T SELECT sqrt(0.5) FROM my-index LIMIT 1
strcmp strcmp(string T, string T) -> T SELECT strcmp('hello', 'hello') FROM my-index LIMIT 1
subtract subtract(number T, number) -> T SELECT subtract(3, 2) FROM my-index LIMIT 1
truncate truncate(number T, number T) -> T SELECT truncate(56.78, 1) FROM my-index LIMIT 1
/ number [op] number -> number SELECT 1 / 100 FROM my-index LIMIT 1
% number [op] number -> number SELECT 1 % 100 FROM my-index LIMIT 1

Trigonometric

Function Specification Example
acos acos(number T) -> double SELECT acos(0.5) FROM my-index LIMIT 1
asin asin(number T) -> double SELECT asin(0.5) FROM my-index LIMIT 1
atan atan(number T) -> double SELECT atan(0.5) FROM my-index LIMIT 1
atan2 atan2(number T, number) -> double SELECT atan2(1, 0.5) FROM my-index LIMIT 1
cos cos(number T) -> double SELECT cos(0.5) FROM my-index LIMIT 1
cosh cosh(number T) -> double SELECT cosh(0.5) FROM my-index LIMIT 1
cot cot(number T) -> double SELECT cot(0.5) FROM my-index LIMIT 1
degrees degrees(number T) -> double SELECT degrees(0.5) FROM my-index LIMIT 1
radians radians(number T) -> double SELECT radians(0.5) FROM my-index LIMIT 1
sin sin(number T) -> double SELECT sin(0.5) FROM my-index LIMIT 1
sinh sinh(number T) -> double SELECT sinh(0.5) FROM my-index LIMIT 1
tan tan(number T) -> double SELECT tan(0.5) FROM my-index LIMIT 1

Date and time

Function Specification Example
adddate adddate(date, INTERVAL expr unit) -> date SELECT adddate(date('2020-08-26'), INTERVAL 1 hour) FROM my-index LIMIT 1
curdate curdate() -> date SELECT curdate() FROM my-index LIMIT 1
date date(date) -> date SELECT date() FROM my-index LIMIT 1
date_format date_format(date, string) -> string or date_format(date, string, string) -> string SELECT date_format(date, 'Y') FROM my-index LIMIT 1
date_sub date_sub(date, INTERVAL expr unit) -> date SELECT date_sub(date('2008-01-02'), INTERVAL 31 day) FROM my-index LIMIT 1
dayofmonth dayofmonth(date) -> integer SELECT dayofmonth(date) FROM my-index LIMIT 1
dayname dayname(date) -> string SELECT dayname(date('2020-08-26')) FROM my-index LIMIT 1
dayofyear dayofyear(date) -> integer SELECT dayofyear(date('2020-08-26')) FROM my-index LIMIT 1
dayofweek dayofweek(date) -> integer SELECT dayofweek(date('2020-08-26')) FROM my-index LIMIT 1
from_days from_days(N) -> integer SELECT from_days(733687) FROM my-index LIMIT 1
hour hour(time) -> integer SELECT hour((time '01:02:03')) FROM my-index LIMIT 1
maketime maketime(integer, integer, integer) -> date SELECT maketime(1, 2, 3) FROM my-index LIMIT 1
microsecond microsecond(expr) -> integer SELECT microsecond((time '01:02:03.123456')) FROM my-index LIMIT 1
minute minute(expr) -> integer SELECT minute((time '01:02:03')) FROM my-index LIMIT 1
month month(date) -> integer SELECT month(date) FROM my-index
monthname monthname(date) -> string SELECT monthname(date) FROM my-index
now now() -> date SELECT now() FROM my-index LIMIT 1
quarter quarter(date) -> integer SELECT quarter(date('2020-08-26')) FROM my-index LIMIT 1
second second(time) -> integer SELECT second((time '01:02:03')) FROM my-index LIMIT 1
subdate subdate(date, INTERVAL expr unit) -> date, datetime SELECT subdate(date('2008-01-02'), INTERVAL 31 day) FROM my-index LIMIT 1
time time(expr) -> time SELECT time('13:49:00') FROM my-index LIMIT 1
time_to_sec time_to_sec(time) -> long SELECT time_to_sec(time '22:23:00') FROM my-index LIMIT 1
timestamp timestamp(date) -> date SELECT timestamp(date) FROM my-index LIMIT 1
to_days to_days(date) -> long SELECT to_days(date '2008-10-07') FROM my-index LIMIT 1
week week(date[mode]) -> integer SELECT week(date('2008-02-20')) FROM my-index LIMIT 1
year year(date) -> integer SELECT year(date) FROM my-index LIMIT 1

String

Function Specification Example
ascii ascii(string T) -> integer SELECT ascii(name.keyword) FROM my-index LIMIT 1
concat concat(str1, str2) -> string SELECT concat('hello', 'world') FROM my-index LIMIT 1
concat_ws concat_ws(separator, string, string…) -> string SELECT concat_ws("-", "Tutorial", "is", "fun!") FROM my-index LIMIT 1
left left(string T, integer) -> T SELECT left('hello', 2) FROM my-index LIMIT 1
length length(string) -> integer SELECT length('hello') FROM my-index LIMIT 1
locate locate(string, string, integer) -> integer or locate(string, string) -> INTEGER SELECT locate('o', 'hello') FROM my-index LIMIT 1, SELECT locate('l', 'hello', 3) FROM my-index LIMIT 1
replace replace(string T, string, string) -> T SELECT replace('hello', 'l', 'x') FROM my-index LIMIT 1
right right(string T, integer) -> T SELECT right('hello', 1) FROM my-index LIMIT 1
rtrim rtrim(string T) -> T SELECT rtrim(name.keyword) FROM my-index LIMIT 1
substring substring(string T, integer, integer) -> T SELECT substring(name.keyword, 2,5) FROM my-index LIMIT 1
trim trim(string T) -> T SELECT trim(' hello') FROM my-index LIMIT 1
upper upper(string T) -> T SELECT upper('helloworld') FROM my-index LIMIT 1

Aggregate

Function Specification Example
avg avg(number T) -> T SELECT avg(2, 3) FROM my-index LIMIT 1
count count(number T) -> T SELECT count(date) FROM my-index LIMIT 1
min min(number T, number) -> T SELECT min(2, 3) FROM my-index LIMIT 1
show show(string T) -> T SHOW TABLES LIKE my-index

Advanced

Function Specification Example
if if(boolean, es_type, es_type) -> es_type SELECT if(false, 0, 1) FROM my-index LIMIT 1, SELECT if(true, 0, 1) FROM my-index LIMIT 1
ifnull ifnull(es_type, es_type) -> es_type SELECT ifnull('hello', 1) FROM my-index LIMIT 1, SELECT ifnull(null, 1) FROM my-index LIMIT 1
isnull isnull(es_type) -> integer SELECT isnull(null) FROM my-index LIMIT 1, SELECT isnull(1) FROM my-index LIMIT 1