Kinetica has native API support for a variety of expressions, which are used as inputs while querying data (for supported SQL expressions, see Queries (SQL) ). These native API expressions can involve one or more constants (both numeric and string) and table columns; however, expressions cannot be applied to storeonly columns. The expressions follow certain constraints based on where they are used, but all the expressions should follow the basic guidelines outlined below.
Important
Use parentheses liberally to ensure correct orderofoperations.
Constants
Types  Details 

String  String constants must be enclosed in single quotes or double quotes, e.g.,

Numerical  Numerical constants can be expressed as:

Date/Time  Supported date formats have optional leading zeros for months & days, while datetime optionally supports UTC format. Examples of each date/time data type:

Operators
When these operators are applied to numeric columns, they will interpret nonzero values as true and zero values as false, returning 1 for true and 0 for false.
Types  Details  

Bitwise  &  << >> ~ ^  
Comparison  > < >= <= == = != <> in


Logical 


Mathematical  +  * / 
Functions
Conditional Functions
Function  Description  

CASE(expr, {<matches>}, {<values>}, value_if_no_match)  Evaluates expr: returns the first value from the values list whose corresponding match from the matches list is equal to expr; returns value_if_no_match if expr is not equal to any of the matches in the matches list Note A null cannot be used for either a match or value, but value_if_no_match can be null.
Examples:


IF(expr, value_if_true, value_if_false)  Evaluates expr: if true, returns value_if_true; otherwise, if false or null, returns value_if_false; see ShortCircuiting for errorchecking details

Conversion Functions
For the CAST() and CONVERT() functions, valid destination types are:
Numeric  Text  Date/Time  Geometry 





Function  Description  

CAST(original value, destination type)  Returns the equivalent of original value converted to the destination type. Useful for converting strings to numbers and numbers to strings  
CHAR(int)  Returns the character associated with the ASCII code in int  
CHAR1(charN)  Converts the given charN to char1 type  
CHAR2(charN)  Converts the given charN to char2 type  
CHAR4(charN)  Converts the given charN to char4 type  
CHAR8(charN)  Converts the given charN to char8 type  
CHAR16(charN)  Converts the given charN to char16 type  
CHAR32(charN)  Converts the given charN to char32 type  
CHAR64(charN)  Converts the given charN to char64 type  
CHAR128(charN)  Converts the given charN to char128 type  
CHAR256(charN)  Converts the given charN to char256 type  
CONVERT(original value, destination type, style)  Returns the equivalent of original value converted to the destination type. The style parameter is currently only applicable when the destination type is string and the original value is of timestamp or datetime type. Valid style codes include:
Examples:


DATE(expr)  Converts expr to date (YYYYMMDD) format  
DATETIME(expr)  Converts expr to datetime (YYYYMMDD HH24:MI:SS.mmm) format  
DECIMAL(expr)  Converts the given expr to decimal type  
DOUBLE(expr)  Converts the given expr to double type  
FLOAT(expr)  Converts the given expr to float type  
INT(expr)  Converts the given expr to int type  
LONG(expr)  Converts the given expr to long type  
STRING(expr)  Converts expr to a string format appropriate for the expr type  
TIME(expr)  Converts expr to time (HH:MI:SS.mmm) format  
TIMESTAMP(expr)  Converts expr to the number of milliseconds since the epoch  
TO_CHAR(expr, format)  Converts the given date/time expr to a string matching the given format. The returned string will be truncated at 32 characters. See Date/Time Conversion Codes for the list of format codes. Example:


TO_DATE(string, format)  Converts the given string to a date type with the given format code. See Date/Time Conversion Codes for the list of format codes. Example: TO_DATE('20170615', 'YYYYMMDD') 

TO_DATETIME(string, format)  Converts the given string to a datetime type with the given format code. See Date/Time Conversion Codes for the list of format codes. Example: TO_DATE('20170615 10:37:30', 'YYYYMMDD HH:MI:SS') 

TO_TIME(string, format)  Converts the given string to a time type with the given format code. See Date/Time Conversion Codes for the list of format codes. Example: TO_TIME('10:37:30', 'HH:MI:SS') 

TO_TIMESTAMP(string, format)  Converts the given string to a timestamp type with the given format code. See Date/Time Conversion Codes for the list of format codes. Example: TO_TIMESTAMP('20170615 10:37:30', 'YYYYMMDD HH:MI:SS') 

ULONG(expr)  Converts the given expr to ulong type 
Date/Time Conversion Codes
The following formatting codes can be used to convert date/time strings to native date/time objects.
These characters are interpreted literally:  / , . ; :
Other characters need to be doublequoted in order to be interpreted literally. For example, MMDDYYYY can be used to convert 01022022 to a date, while "Today is "MMDDYYYY is needed to convert Today is 01022022.
Format Code  Description 

_  Any one character 
?  Zero or more nondigit characters 
$  Everything after this is optional; e.g., HH:MI:SS$.MMM would accept 12:34:56 and 12:34:56.789 
AD  Era indicator without periods 
A.D.  Era indicator with periods 
AM  Meridian indicator without periods [AM, PM] 
A.M.  Meridian indicator with periods [A.M., P.M.] 
BC  Era indicator without periods 
B.C.  Era indicator with periods 
C  Number of day in calendar month, with optional leading zero [1  31] 
CC  Century (if last 2 digits of the 4digit year are 00, this is the first 2 digits; otherwise, this is first 2 digits + 1) 
D  Day of week [1  7] (Sunday  Saturday) 
DAY  Day of week [Sunday  Saturday] 
DD  Number of day in month, with leading zero [01  31] 
DDD  Number of day of year [1  366] 
DL  Date long format (fmDay, Month dd, yyyy) 
DS  Date short format (MM/DD/RRRR) 
DY  Abbreviated day name 
E  Abbreviated era name 
EE  Full era name 
FF[19]  Fractional seconds with the number of fractional second digits specified 
FM  Format modeltoggles leading or trailing blanks. A modifier can appear in a format model more than once. In such a case, each subsequent occurrence toggles the effects of the modifier. Its effects are enabled for the portion of the model following its first occurrence, and then disabled for the portion following its second, and then reenabled for the portion following its third, and so on. 
FX  Format exactrequires exact matching between the character data and the format model 
H  Alias for H12 
H12  Hour of day in 12hour format, with optional leading zero [0  11] 
H24  Hour of day in 24hour format, with optional leading zero [0  23] 
HH  Alias for HH12 
HH12  Hour of day in 12hour format, with leading zero [00  11] 
HH24  Hour of day in 24hour format, with leading zero [00  23] 
I  Last digit of ISO year 
ID  ISO 8601 day of week [1  7] (Monday  Sunday) 
IDDD  ISO 8601 day of year [001  371] (where 001 is the Monday of the 1st ISO week) 
IW  ISO 8601 week of year [01  53] (where 01 contains the first Thursday of the year) 
IY  Last 2 digits of ISO year 
IYY  Last 3 digits of ISO year 
IYYY  Last 4 digits of ISO year 
J  Julian day; the number of days since January 1, 4712 BC. Number specified with J must be integers. 
LLL  Whole milliseconds (often positioned after a colon); e.g., 12:34:56:78 => 78 milliseconds 
M  Number of month in year, with optional leading zero [1  12] 
MI  Minute of hour [00  59] 
MM  Number of month in year, with leading zero [01  12] 
MMM  Fractions of a second up to milliseconds; e.g., 12:34:56.78 => 780 milliseconds 
MON  3character abbreviation of month in title case [Jan  Dec] 
MONTH  Full name of month [January  December] 
MS  Alias for MMM 
OF  Timezone offset from UTC (only supported in TO_CHAR) 
PM  Alias for AM 
P.M.  Alias for A.M. 
Q  Quarter of the year [1  4] (JanuaryMarch  OctoberDecember) 
RM  Roman numeral month [I  XII] (January  December) 
RR  Rounded year. Assume the given 2digit year occurs in the present century, then:

RRRR  Either a 2digit or 4digit year; if 2digit, equivalent to RR 
SCC  Same as CC, except that a leading negative sign can be used to indicate B.C. dates 
SS  Second of minute [00  59] 
SSSS  Alias for SSSSS 
SSSSS  Seconds past midnight [0  86399] 
SYEAR  Same as YEAR, except that a leading negative sign can be used to indicate B.C. dates 
SYYYY  Same as YYYY, except that a leading negative sign can be used to indicate B.C. dates 
TS  Time short format (H24:MI:SS.MMM) 
TZ  Time zone abbreviation 
TZD  Time zone Daylight Savings information 
TZH  Time zone hour (ISO) 
TZM  Time zone minute (ISO) 
TZR  Time zone region (e.g., US/Pacific) 
US  Microseconds 
W  Week of month [1  5], where week 1 starts on the first day of the month and ends on the seventh 
WW  Week of year [1  53], where week 1 starts on the first day of the year and continues to the seventh day of the year 
X  Local radix character (e.g., ., as in HH:MI:SSXFF) 
Y  Last 1 digit of year 
Y,YYY  Year with a comma after the thousands place 
YEAR  Year spelled out 
YY  Last 2 digits of year 
YYY  Last 3 digits of year 
YYYY  4digit year 
Date/Time Functions
This section comprises the following functions:
 Date/Time Base Functions, which can extract parts of date/time expressions, convert back and forth between data types, and return the current date/time
 Date/Time Complex Conversion Functions, which can perform more complex date/type conversions
Date/Time Base Functions
Note
Integer fields are assumed to be seconds since the epoch; long/timestamp fields are assumed to be milliseconds since the epoch.
Function  Description  

CURRENT_DATE()  Returns the date as YYYYMMDD  
CURRENT_DATETIME()  Returns the date & time as YYYYMMDD HH24:MI:SS.mmm  
CURRENT_TIME()  Returns the time as HH24:MI:SS.mmm  
CURRENT_TIMESTAMP()  Returns the date & time as the number of milliseconds since the epoch  
DATEADD(unit, amount, expr)  Adds the positive or negative integral amount of unit date/time intervals to the date or datetime value in expr The following date/time intervals are supported for unit:
Note Any of these unit types can have a SQL_TSI_ prefix prepended to them; e.g., both DAY and SQL_TSI_DAY are valid unit types for specifying a day interval. They may also be singlequoted or unquoted. Examples:


DATE_BUCKET (width, ds[, offset[, base]]) 
Calculates the date range in which a given date ds falls, based on a set of fixedwidth "buckets" with the given width, startaligned base date, and offset from that base date The width is the number of days each bucket should span. The offset is the number of days after (positive offset) or number of days before (negative offset) the base date to which the buckets should be aligned. The default is no offset. The default base is 20000103. For example, given the following call: DATE_BUCKET(7, ds, 3, '20230221') The call will be processed as follows:


DATEDIFF([unit,] begin, end)  Calculates the difference between two date/time expressions, returning the result as an integral difference in the units specified; more precisely, how many whole date/time intervals of type unit need to be added to (or subtracted from) begin to equal end (or get as close as possible without going past it) using the unit types and the rules specified in TIMESTAMPADD. The default unit is DAY. Examples:


DATE_TRUNC(part, expr)  Returns the date/time expr after truncating it beyond the given date/time part. The following date/time constants are supported for part:
Examples:


DAY(expr)  Alias for DAYOFMONTH(expr)  
DAYNAME(expr)  Extracts the day of the week from expr and converts it to the corresponding day name [Sunday  Saturday ]  
DAYOFMONTH(expr)  Extracts the day of the month from expr [1  31]  
DAYOFWEEK(expr)  Extracts the day of the week from expr [1  7]


DAY_OF_WEEK(expr)  Alias for DAYOFWEEK(expr)  
DAYOFYEAR(expr)  Extracts the day of the year from expr [1  366]  
DAY_OF_YEAR(expr)  Alias for DAYOFYEAR(expr)  
EPOCH_MSECS_TO_DATETIME(expr)  Converts expr milliseconds since the epoch to a date/time Example:


EPOCH_SECS_TO_DATETIME(expr)  Converts expr seconds since the epoch to a date/time Example:


HOUR(expr)  Extracts the hour of the day from expr [0  23]  
LAST_DAY(expr)  Returns the date of the last day of the month in the given expr  
MINUTE(expr)  Extracts the minute of the day from expr [0  59]  
MONTH(expr)  Extracts the month of the year from expr [1  12]  
MONTHNAME(expr)  Extracts the month of the year from expr and converts it to the corresponding month name [ January  December]  
MSEC(expr)  Extracts the millisecond of the second from expr [0  999]  
MSECS_SINCE_EPOCH(expr)  Converts expr date/time to the number of milliseconds since the epoch Example:


NEXT_DAY(date, expr)  Returns the date of the next day of the week, provided as a day name in expr, that occurs after the given date Some examples, given that 20001010 is a Tuesday:


NOW()  Alias for CURRENT_DATETIME()  
QUARTER(expr)  Extracts the quarter of the year from expr [1  4]


SEC(expr)  Alias for SECOND(expr)  
SECOND(expr)  Extracts the seconds of the minute from expr [ 0  59 ]  
SECS_SINCE_EPOCH(expr)  Converts expr date/time to the number of seconds since the epoch Example:


TIMEBOUNDARYDIFF(unit, begin, end)  Calculates the difference between two date/time expressions, returning the result as an integral difference in the units specified; more precisely, how many whole date/time intervals of type unit need to be added to (or subtracted from) begin to equal end up to the precision of the unit specified, using the unit types and rules specified in TIMESTAMPADD. For example, if unit were MONTH, only the year & month of begin and end would be used in the calculation; if unit were DAY, any time portion from begin & end would be dropped, and so on. This is unlike TIMESTAMPDIFF, which will consider the entirety of both begin & end in the calculation. Note This is symmetric with TIMESTAMPADD in all cases, as adding 1 MONTH to Mar 31st results in Apr 30th, and the TIMEBOUNDARYDIFF in MONTH units between those two dates is 1. Examples:
Important This function does not work with string literal date stamps (e.g., 20001231 12:34:56); to use string literals in this function, first cast them to the appropriate date/time type (e.g., DATETIME('YYYYMMDD HH24:MI:SS')) 

TIME_BUCKET (width, ts[, offset[, base]]) 
Calculates the date/time range in which a given timestamp ts falls, based on a set of fixedwidth "buckets" with the given width, startaligned base date/time, and offset from that base date/time The width is the number of milliseconds each bucket should span. The offset is the number of milliseconds after (positive offset) or number of milliseconds before (negative offset) the base date/time to which the buckets should be aligned. The default is no offset. The default base is 20000103 00:00:00. For example, given the following call: TIME_BUCKET(5 * 60 * 1000, ts, 2.5 * 60 * 1000, '20230228') The call will be processed as follows:


TIMESTAMPADD(unit, amount, expr)  Adds the positive or negative integral amount of unit date/time intervals to the date, datetime, or time value in expr The following date/time intervals are supported for unit:
Note Any of these unit types can have a SQL_TSI_ prefix prepended to them; e.g., both DAY and SQL_TSI_DAY are valid unit types for specifying a day interval. They may also be singlequoted or unquoted. Examples:


TIMESTAMPDIFF(unit, begin, end)  Calculates the difference between two date/time expressions, returning the result as an integral difference in the units specified; more precisely, how many whole date/time intervals of type unit need to be added to (or subtracted from) begin to equal end (or get as close as possible without going past it) using the unit types and and rules specified in TIMESTAMPADD. Unlike TIMEBOUNDARYDIFF, all date/time components of both begin & end will be considered in the calculation, not just those that are up to the precision of unit. Note This is not symmetric with TIMESTAMPADD in all cases, as adding 1 MONTH to Mar 31st results in Apr 30th, but the TIMESTAMPDIFF in MONTH units between those two dates is 0. Examples:


TIMESTAMP_TRUNC(part, expr)  Alias for DATE_TRUNC(part, expr)  
UNIX_TIMESTAMP(expr)  Alias for SECS_SINCE_EPOCH(expr)  
WEEK(expr)  Extracts the week of the year from expr [1  54]; each full week starts on Sunday (A 1 is returned for the week containing Jan 1st)  
YEAR(expr)  Extracts the year from expr; 4digit year, A.D. 
Date/Time Complex Conversion Functions
Function  Description  

DATE_TO_EPOCH_MSECS(year, month, day, hour, min, sec, msec)  Converts the full date to the number of milliseconds since the epoch; negative values are accepted Example:


DATE_TO_EPOCH_SECS(year, month, day, hour, min, sec)  Converts the full date to the number of seconds since the epoch; negative values are accepted Example:


TIMESTAMP_FROM_DATE_TIME(date, time)  Converts the given date and time to a composite timestamp in milliseconds since the epoch Example:


WEEK_TO_EPOCH_MSECS(year, week_number)  Converts the year and week number to the number of milliseconds since the epoch; negative values are accepted Example:


WEEK_TO_EPOCH_SECS(year, week_number)  Converts the year and week number to the number of seconds since the epoch. Negative values are accepted. Each new week begins Sunday at midnight. Example:

Geospatial/Geometry Functions
Five types of geospatial functions are available in Kinetica:
 Scalar Functions  apply a geospatial function at the record level to WKT or X/Y data
 Enhanced Performance Scalar Functions  apply performanceoptimized geospatial functions to X/Y data
 Aggregate Functions  apply a geospatial function across groups of records to WKT or X/Y data
 Track Functions  apply scalar & aggregate functions to trackbased data
 H3 Functions  apply H3 gridding functions to WKT or X/Y data
Tip
 Use ST_ISVALID to determine if a geometry object is valid. The functions below work best with valid geometry objects.
 Use the REMOVE_NULLABLE function to remove any nullable column types that could result from calculating a derived column (e.g., as in Projections) using one of the functions below.
Enhanced Performance Scalar Functions
The functions below all compare x and y coordinates to geometry objects (or vice versa), thus increasing their performance in queries. Each of these functions have a geometrytogeometry version listed in the next section.
Function  Description 

STXY_CONTAINS(geom, x, y)  Returns 1 (true) if geom contains the x and y coordinate, e.g. lies in the interior of geom. The coordinate cannot be on the boundary and also be contained because geom does not contain its boundary 
STXY_CONTAINSPROPERLY(geom, x, y)  Returns 1 (true) if the x and y coordinate intersects the interior of geom but not the boundary (or exterior) because geom does not contain its boundary but does contain itself 
STXY_COVEREDBY(x, y, geom)  Returns 1 (true) if the x and y coordinate is covered by geom 
STXY_COVERS(geom, x, y)  Returns 1 (true) if geom covers the x and y coordinate 
STXY_DISJOINT(x, y, geom)  Returns 1 (true) if the given x and y coordinate and the geometry geom do not spatially intersect. 
STXY_DISTANCE(x, y, geom[, solution])  Calculates the minimum distance between the given x and y coordinate and geom using the specified solution type. Solution types available:
Note: If the x and y coordinate and geom intersect (verify using ST_INTERSECTS), the distance will always be 0. 
STXY_DWITHIN(x, y, geom, distance[, solution])  Returns 1 (true) if the x and y coordinate is within the specified distance from geom using the specified solution type. Solution types available:

STXY_ENVDWITHIN(x, y, geom, distance[, solution])  Returns 1 (true) if the x and y coordinate is within the specified distance from the bounding box of geom using the specified solution type. Solution types available:

STXY_ENVINTERSECTS(x, y, geom)  Returns 1 (true) if the bounding box of the given geometry geom intersects the x and y coordinate. 
STXY_GEOHASH(x, y[, precision])  Returns a hash string representation of the given x and y coordinates with specified precision (the length of the resulting geohash string). The longer the precision, the more precise the hash is. By default, precision is set to 20; the max for precision is 32. See Geohashing for an example. 
STXY_H3(x, y, resolution)  Alias for H3_XYTOCELL; see H3 Functions. 
STXY_INTERSECTION(x, y, geom)  Returns the shared portion between the x and y coordinate and the given geometry geom, i.e. the point itself. 
STXY_INTERSECTS(x, y, geom)  Returns 1 (true) if the x and y coordinate and geom intersect in 2D. 
STXY_TOUCHES(x, y, geom)  Returns 1 (true) if the x and y coordinate and geometry geom have at least one point in common but their interiors do not intersect. If geom is a GEOMETRYCOLLECTION, a 0 is returned regardless if the point and geometry touch 
STXY_WITHIN(x, y, geom)  Returns 1 (true) if the x and y coordinate is completely inside the geom geometry i.e., not on the boundary 
Scalar Functions
Function  Description  

DIST(x1, y1, x2, y2)  Computes the Euclidean distance (in degrees), i.e. SQRT( (x1x2)*(x1x2) + (y1y2)*(y1y2) ).  
GEODIST(lon1, lat1, lon2, lat2)  Computes the geographic greatcircle distance (in meters) between two lat/lon points.  
GEOHASH_DECODE_LATITUDE(geohash)  Decodes a given geohash and returns the latitude value for the given hash string. Supports a maximum geohash character length of 16.  
GEOHASH_DECODE_LONGITUDE(geohash)  Decodes a given geohash and returns the longitude value for the given hash string. Supports a maximum geohash character length of 16.  
GEOHASH_ENCODE(lat, lon, precision)  Encodes a given coordinate pair and returns a hash string with a given precision. The maximum precision is 15.  
GEOMETRY(wkt)  Alias for ST_GEOMFROMTEXT(wkt)  
ST_ADDPOINT(linestring, point[, position])  Adds a given point geometry to the given linestring geometry at the specified position, which is a 0based index. If no position is specified, the point will be added to the end.  
ST_ALMOSTEQUALS(geom1, geom2[, decimal])  Returns 1 (true) if given geometries, geom1 and geom2, are almost spatially equal within the given amount of decimal scale. Note that geometries will still be considered equal if the decimal scale for the geometries is within a half order of magnitude of each other; e.g., if decimal is set to 2, then POINT(63.4 123.45) and POINT(63.4 123.454) are equal, but POINT(63.4 123.45) and POINT(63.4 123.459) are not equal. The geometry types must match to be considered equal. If no decimal scale is specified, a default scale of 6 will be applied. 

ST_AREA(geom[, solution])  Returns the area of the given geometry geom if it is a POLYGON or MULTIPOLYGON using the specified solution type. Returns 0 if the input geometry type is (MULTI)POINT or (MULTI)LINESTRING. Solution types available:


ST_AZIMUTH(geom1, geom2)  Returns the azimuth in radians defined by the segment between two POINTs, geom1 and geom2. Returns a null if the input geometry type is MULTIPOINT, (MULTI)LINESTRING, or (MULTI)POLYGON.  
ST_BOUNDARY(geom)  Returns the closure of the combinatorial boundary of a given geometry geom. Returns an empty geometry if geom is an empty geometry. Returns a null if geom is a GEOMETRYCOLLECTION  
ST_BOUNDINGDIAGONAL(geom)  Returns the diagonal of the given geometry's (geom) bounding box.  
ST_BUFFER(geom, radius[, style[, solution]])  Returns a geometry that represents all points whose distance from the given geometry geom is less than or equal to the given distance radius. The radius units can be specified by the solution type (default is in degrees) and the radius is created in the provided style. The style options are specified as a list of blankseparated keyvalue pairs, e.g., 'quad_segs=8 endcap=round'. If an empty style list ('') is provided, the default settings will be used. The style parameter must be specified to provide a solution type. Available style options:
Available solution types:
Tip To create a 5meter buffer around geom using the default styles: ST_BUFFER(geom, 5, '', 1). To create a 5foot (converting feet to meters) buffer around geom using the following styles: ST_BUFFER(geom, 5*0.3048,'quad_segs=4 endcap=flat', 1) 

ST_CENTROID(geom)  Calculates the center of the given geometry geom as a POINT. For (MULTI)POINTs, the center is calculated as the average of the input coordinates. For (MULTI)LINESTRINGs, the center is calculated as the weighted length of each given LINESTRING. For (MULTI)POLYGONs, the center is calculated as the weighted area of each given POLYGON. If geom is an empty geometry, an empty GEOMETRYCOLLECTION is returned  
ST_CLIP(geom1, geom2)  Returns the geometry shared between given geometries geom1 and geom2  
ST_CLOSESTPOINT(geom1, geom2[, solution])  Calculates the 2D POINT in geom1 that is closest to geom2 using the specified solution type. If geom1 or geom2 is empty, a null is returned. Solution types available:


ST_COLLECT(geom1, geom2)  Returns a MULTI* or GEOMETRYCOLLECTION comprising geom1 and geom2. If geom1 and geom2 are the same, singular geometry type, a MULTI* is returned, e.g., if geom1 and geom2 are both POINTs (empty or no), a MULTIPOINT is returned. If geom1 and geom2 are neither the same type nor singular geometries, a GEOMETRYCOLLECTION is returned.  
ST_COLLECTIONEXTRACT(collection, type)  Returns only the specified type from the given geometry collection. Type is a number that maps to the following:


ST_COLLECTIONHOMOGENIZE(collection)  Returns the simplest form of the given collection, e.g., a collection with a single POINT will be returned as POINT(x y), and a collection with multiple individual points will be returned as a MULTIPOINT.  
ST_CONCAVEHULL(geom, target_percent[, allow_holes])  Returns a potentially concave geometry that encloses all geometries found in the given geom set. Use target_percent (values between 0 and 1) to determine the percent of area of a convex hull the concave hull will attempt to fill; 1 will return the same geometry as an ST_CONVEXHULL operation. Set allow_holes to 1 (true) to allow holes in the resulting geometry; default value is 0 (false). Note that allow_holes is independent of the area of target_percent.  
ST_CONTAINS(geom1, geom2)  Returns 1 (true) if no points of geom2 lie in the exterior of geom1 and at least one point of geom2 lies in the interior of geom1. Note that geom1 does not contain its boundary but does contain itself.  
ST_CONTAINSPROPERLY(geom1, geom2)  Returns 1 (true) if geom2 intersects the interior of geom1 but not the boundary (or exterior). Note that geom1 does not contain its boundary but does contain itself.  
ST_CONVEXHULL(geom)  Returns the minimum convex geometry that encloses all geometries in the given geom set.  
ST_COORDDIM(geom)  Returns the coordinate dimension of the given geom, e.g., a geometry with x, y, and z coordinates would return 3.  
ST_COVEREDBY(geom1, geom2)  Returns 1 (true) if no point in geom1 is outside geom2.  
ST_COVERS(geom1, geom2)  Returns 1 (true) if no point in geom2 is outside geom1.  
ST_CROSSES(geom1, geom2)  Returns 1 (true) if the given geometries, geom1 and geom2, spatially cross, meaning some but not all interior points in common. If geom1 and/or geom2 are a GEOMETRYCOLLECTION, a 0 is returned regardless of if the two geometries cross  
ST_DIFFERENCE(geom1, geom2)  Returns a geometry that represents the part of geom1 that does not intersect with geom2.  
ST_DIMENSION(geom)  Returns the dimension of the given geometry geom, which is less than or equal to the coordinate dimension. If geom is a single geometry, a 0 is for POINT, a 1 is for LINESTRING, and a 2 is for POLYGON. If geom is a collection, it will return the largest dimension from the collection. If geom is empty, 0 is returned.  
ST_DISJOINT(geom1, geom2)  Returns 1 (true) if the given geometries, geom1 and geom2, do not spatially intersect.  
ST_DISTANCE(geom1, geom2[, solution])  Calculates the minimum distance between the given geometries, geom1 and geom2, using the specified solution type. Solution types available:
Note: If geom1 and geom2 intersect (verify using ST_INTERSECTS), the distance will always be 0. 

ST_DISTANCEPOINTS(x1, y1, x2, y2[, solution])  Calculates the minimum distance between the given points, x1, y1 and x2, y2, using the specified solution type. Solution types available:


ST_DFULLYWITHIN(geom1, geom2, distance[, solution])  Returns 1 (true) if the maximum distance between geometries geom1 and geom2 is less than or equal to the specified distance of each other using the specified solution type. If geom1 or geom2 is null, 0 (false) is returned. Solution types available:


ST_DWITHIN(geom1, geom2, distance[, solution])  Returns 1 (true) if the minimum distance between geometries geom1 and geom2 is within the specified distance of each other using the specified solution type. Solution types available:


ST_ELLIPSE(centerx, centery, height, width)  Returns an ellipse using the following values:


ST_ENDPOINT(geom)  Returns the last point of the given geom as a POINT if it's a LINESTRING. If geom is not a a LINESTRING, null is returned.  
ST_ENVDWITHIN(geom1, geom2, distance[, solution])  Returns 1 (true) if geom1 is within the specified distance of the bounding box of geom2 using the specified solution type. Solution types available:


ST_ENVELOPE(geom)  Returns the bounding box of a given geometry geom.  
ST_ENVINTERSECTS(geom1, geom2)  Returns 1 (true) if the bounding box of the given geometries, geom1 and geom2, intersect.  
ST_EQUALS(geom1, geom2)  Returns 1 (true) if the given geometries, geom1 and geom2, are spatially equal. Note that order does not matter.  
ST_EQUALSEXACT(geom1, geom2[, tolerance])  Returns 1 (true) if the given geometries, geom1 and geom2, are almost spatially equal within some given tolerance. If the values within the given geometries are within the tolerance value of each other, they're considered equal, e.g., if tolerance is 2, POINT(1 1) and POINT(1 3) are considered equal, but POINT(1 1) and POINT(1 3.1) are not. Note that the geometry types have to match for them to be considered equal. The default tolerance is 0, which makes this function effectively equivalent to ST_EQUALS(geom1, geom2) in the default case.  
ST_ERASE(geom1, geom2)  Returns the result of erasing a portion of geom1 equal to the size of geom2.  
ST_EXPAND(geom, units)  Returns the bounding box expanded in all directions by the given units of the given geom. The expansion can also be defined for separate directions by providing separate parameters for each direction, e.g., ST_EXPAND(geom, unitsx, unitsy, unitsz, unitsm).  
ST_EXPANDBYRATE(geom, rate)  Returns the bounding box expanded by a given rate (a ratio of width and height) for the given geometry geom. The rate must be between 0 and 1.  
ST_EXTERIORRING(geom)  Returns a LINESTRING representing the exterior ring of the given POLYGON geom  
ST_FORCE2D(geom)  Returns the 2dimensional version (e.g., X and Y coordinates) of geom, the provided geometry or set of geometries (e.g., via GEOMETRYCOLLECTION or WKT column name).  
ST_FORCE3D(geom[, z])  Returns the 3dimensional version (e.g., X, Y, and Z coordinates) of geom, a provided geometry or set of geometries (e.g., via GEOMETRYCOLLECTION or WKT column name), using z as the geometry's new zvalue. The provided zvalues can also be derived from a numeric column. If no z is provided, a 0 will be applied. Note If a WKT column is provided for geom and a numeric column is provided for z, the z values will be matched to the provided geometries by row in the source table. If a singular geometry is provided for geom and a column is provided for z, threedimensional versions of the provided geometry will be returned for each z value found in the provided z column. If columns are provided for both geom and z and nulls are present in either column, the row containing null values will be skipped in the results. 

ST_GENERATEPOINTS(geom, num)  Creates a MULTIPOINT containing a number num of randomly generated points within the boundary of geom.  
ST_GEOHASH(geom[, precision])  Returns a hash string representation of the given geometry geom with specified precision (the length of the resulting geohash string). The longer the precision, the more precise the hash is. By default, precision is set to 20; the max for precision is 32. Returns null if geom is an empty geometry. See Geohashing for an example. Note The value returned will not be a geohash of the exact geometry but a geohash of the centroid of the given geometry 

ST_GEOMETRYFROMTEXT(wkt)  Alias for ST_GEOMFROMTEXT(wkt)  
ST_GEOMETRYN(geom, index)  Returns the index geometry back from the given geom geometry. The index starts from 1 and goes to the number of geometries in geom.  
ST_GEOMETRYTYPE(geom)  Returns the type of geometry from the given geom.  
ST_GEOMETRYTYPEID(geom)  Returns the type ID of from geom. Type and ID mappings:


ST_GEOMFROMGEOHASH(geohash[, precision])  Returns a POLYGON boundary box using the given geohash with a precision set by the integer precision. If precision is specified, the function will use as many characters in the hash equal to precision to create the geometry. If no precision is specified, the full length of the geohash is used. See Geohashing for an example. 

ST_GEOMFROMH3(h3_index)  Alias for H3_CELLTOBOUNDARY; see H3 Functions.  
ST_GEOMFROMTEXT(wkt)  Returns a geometry from the given WellKnown text representation wkt. Note that this function is only compatible with constants.  
ST_H3(wkt, resolution)  Alias for H3_GEOMTOCELL; see H3 Functions.  
ST_HEXGRID(xmin, ymin, xmax, ymax, cell_side[, limit])  Creates a MULTIPOLYGON containing a grid of hexagons between given minimum and maximum points of a bounding box. The minimum point cannot be greater than or equal to the maximum point. The size (in meters) of the individual hexagons' sides is determined by cell_side. The cell_side cannot be greater than the width or height of the bounding box. The maximum number of cells that can be produced is determined by limit, a positive integer. Supported values for limit:
If the custom limit request specifies more cells (based on the bounding box and the cell_side) than the system limit, a null is returned. 

ST_INTERIORRINGN(geom, n)  Returns the nth interior LINESTRING ring of the POLYGON geom. If geom is not a POLYGON or the given n is out of range, a null is returned. The index begins at 1  
ST_INTERSECTION(geom1, geom2)  Returns the shared portion between given geometries geom1 and geom2  
ST_INTERSECTS(geom1, geom2)  Returns 1 (true) if the given geometries, geom1 and geom2, intersect in 2D  
ST_ISCLOSED(geom)  Returns 1 (true) if the given geometry's (geom) start and end points coincide  
ST_ISCOLLECTION(geom)  Returns 1 (true) if geom is a collection, e.g., GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING, etc.  
ST_ISEMPTY(geom)  Returns 1 (true) if geom is empty  
ST_ISRING(geom)  Returns 1 (true) if LINESTRING geom is both closed (per ST_ISCLOSED) and "simple" (per ST_ISSIMPLE). Returns 0 if geom is not a LINESTRING  
ST_ISSIMPLE(geom)  Returns 1 (true) if geom has no anomalous geometric points, e.g., selfintersection or selftangency  
ST_ISVALID(geom)  Returns 1 (true) if geom (typically a [MULTI]POLYGON) is well formed. A POLYGON is valid if its rings do not cross, and its boundary intersects only at POINTs (not along a line). The POLYGON must also not have dangling LINESTRINGs. A MULTIPOLYGON is valid if all of its elements are also valid, and the interior rings of those elements do not intersect. Each element's boundaries may touch but only at POINTs (not along a line). ST_MAKEVALID(geom) can be used to help correct invalid geometries.  
ST_ISVALIDREASON(geom)  Returns Valid Geometry if geom is well formed, according to ST_ISVALID(geom); otherwise, returns the reason geom is determined to be malformed. ST_MAKEVALID(geom) can be used to help correct invalid geometries. Example:


ST_LENGTH(geom[, solution])  Returns the length of the geometry if it is a LINESTRING or MULTILINESTRING. Returns 0 if another type of geometry, e.g., POINT, MULTIPOINT, etc. GEOMETRYCOLLECTIONs are also supported but the aforementioned type limitation still applies; the collection will be recursively searched for LINESTRINGs and MULTILINESTRINGs and the summation of all supported geometry types is returned (unsupported types are ignored). Solution types available:


ST_LINEFROMMULTIPOINT(geom)  Creates a LINESTRING from geom if it is a MULTIPOINT. Returns null if geom is not a MULTIPOINT  
ST_LINEINTERPOLATEPOINT(geom, fraction)  Returns a POINT that represents the specified fraction of the LINESTRING geom. If geom is either empty or not a LINESTRING, null is returned  
ST_LINELOCATEPOINT(linestring, point)  Returns the location of the closest point in the given linestring to the given point as a value between 0 and 1. The return value is a fraction of the total linestring length.  
ST_LINEMERGE(geom)  Returns a LINESTRING or MULTILINESTRING from a given geom. If geom is a MULTILINESTRING comprising LINESTRINGs with shared endpoints, a contiguous LINESTRING is returned. If geom is a LINESTRING or a MULTILINESTRING comprising LINESTRINGS without shared endpoints, geom is returned If geom is an empty (MULTI)LINESTRING or a (MULTI)POINT or (MULTI)POLYGON, an empty GEOMETRYCOLLECTION is returned.  
ST_LINESUBSTRING(geom, start_fraction, end_fraction)  Returns the fraction of a given geom LINESTRING where start_fraction and end_fraction are between 0 and 1. For example, given LINESTRING(1 1, 2 2, 3 3) a start_fraction of 0 and an end_fraction of 0.25 would yield the first quarter of the given LINESTRING, or LINESTRING(1 1, 1.5 1.5). Returns null if start_fraction is greater than end_fraction. Returns null if input geometry is (MULTI)POINT, MULTILINESTRING, or (MULTI)POLYGON. Returns null if start_fraction and/or end_fraction are less than 0 or more than 1.  
ST_LONGESTLINE(geom1, geom2[, solution])  Returns the LINESTRING that represents the longest line of points between the two geometries. If multiple longest lines are found, only the first line found is returned. If geom1 or geom2 is empty, null is returned. Solution types available:


ST_MAKEENVELOPE(xmin, ymin, xmax, ymax)  Creates a rectangular POLYGON from the given min and max parameters  
ST_MAKELINE(geom[, geom2])  Creates a LINESTRING from geom if it is a MULTIPOINT. If geom is a POINT, there must be at least one other POINT to construct a LINESTRING. If geom is a LINESTRING, it must have at least two points. Returns null if geom is not a POINT, MULTIPOINT, or LINESTRING Note This function can be rather costly in terms of performance 

ST_MAKEPOINT(x, y)  Creates a POINT at the given coordinate Note This function can be rather costly in terms of performance 

ST_MAKEPOLYGON(geom)  Creates a POLYGON from geom. Inputs must be closed LINESTRINGs Note This function can be rather costly in terms of performance 

ST_MAKETRIANGLE2D(x1, y1, x2, y2, x3, y3)  Creates a closed 2D POLYGON with three vertices  
ST_MAKETRIANGLE3D(x1, y1, z1, x2, y2, z2, x3, y3, z3)  Creates a closed 3D POLYGON with three vertices  
ST_MAKEVALID(geom[, options])  Attempts to convert geom into a valid geometry when it is malformed, as determined by ST_ISVALID(geom). Returns geom if it is a valid geometry already. The method used to convert invalid geometries into valid ones can be specified in options as a spaceseparated string of x=y key/value pairs. The keys and corresponding values are as follows:
Example using default linework method:
Example using the structure method without dropping collapsible parts of the converted geometry:
Example using the structure method with dropping collapsible parts of the converted geometry:


ST_MAXDISTANCE(geom1, geom2[, solution])  Returns the maximum distance between the given geom1 and geom2 geometries using the specified solution type. If geom1 or geom2 is empty, null is returned. Solution types available:


ST_MAXX(geom)  Returns the maximum x coordinate of a bounding box for the given geom geometry. This function works for 2D and 3D geometries.  
ST_MAXY(geom)  Returns the maximum y coordinate of a bounding box for the given geom geometry. This function works for 2D and 3D geometries.  
ST_MAXZ(geom)  Returns the maximum z coordinate of a bounding box for the given geom geometry. This function works for 2D and 3D geometries.  
ST_MINX(geom)  Returns the minimum x coordinate of a bounding box for the given geom geometry. This function works for 2D and 3D geometries.  
ST_MINY(geom)  Returns the minimum y coordinate of a bounding box for the given geom geometry. This function works for 2D and 3D geometries.  
ST_MINZ(geom)  Returns the minimum z coordinate of a bounding box for the given geom geometry. This function works for 2D and 3D geometries.  
ST_MULTI(geom)  Returns geom as a MULTI geometry, e.g., a POINT would return a MULTIPOINT.  
ST_MULTIPLERINGBUFFERS(geom, distance[, outside])  Creates multiple buffers at specified distance around the given geom geometry. Multiple distances are specified as commaseparated values in an array, e.g., [10,20,30]. Valid values for outside are:


ST_NEAR(geom1, geom2)  Returns the portion of geom2 that is closest to geom1. If geom2 is a singular geometry object (e.g., POINT, LINESTRING, POLYGON), geom2 will be returned. If geom2 a multigeometry, e.g., MULTIPOINT, MULTILINESTRING, etc., the nearest singular geometry in geom2 will be returned.  
ST_NORMALIZE(geom)  Returns geom in its normalized (canonical) form, which may rearrange the points in lexicographical order.  
ST_NPOINTS(geom)  Returns the number of points (vertices) in geom.  
ST_NUMGEOMETRIES(geom)  If geom is a collection or MULTI geometry, returns the number of geometries. If geom is a single geometry, returns 1.  
ST_NUMINTERIORRINGS(geom)  Returns the number of interior rings if geom is a POLYGON. Returns null if geom is anything else.  
ST_NUMPOINTS(geom)  Returns the number of points in the geom LINESTRING. Returns null if geom is not a LINESTRING.  
ST_OVERLAPS(geom1, geom2)  Returns 1 (true) if given geometries geom1 and geom2 share space. If geom1 and/or geom2 are a GEOMETRYCOLLECTION, a 0 is returned regardless of if the two geometries overlap  
ST_PARTITION(geom[, threshold])  Returns a MULTIPOLYGON representing the given geom partitioned into a number of POLYGONs with a maximum number of vertices equal to the given threshold. Minimum value for threshold is 10; default value is 10000. If geom is not a POLYGON or MULTIPOLYGON, geom is returned. If the number of vertices in geom is less than the threshold, geom is returned.  
ST_PERIMETER(geom[, solution])  Returns the perimeter of the geometry if it is a POLYGON or MULTIPOLYGON. Returns 0 if another type of geometry, e.g., POINT, MULTIPOINT, LINESTRING, or MULTILINESTRING. GEOMETRYCOLLECTIONs are also supported but the aforementioned type limitation still applies; the collection will be recursively searched for POLYGONs and MULTIPOLYGONs and the summation of all supported geometry types is returned (unsupported types are ignored). Solution types available:


ST_POINT(x, y)  Returns a POINT with the given x and y coordinates.  
ST_POINTFROMGEOHASH(geohash[, precision])  Returns a POINT using the given geohash with a precision set by the integer precision. If precision is specified, the function will use as many characters in the hash equal to precision to create the geometry. If no precision is specified, the full length of the geohash is used. Note The POINT returned represents the center of the bounding box of the geohash 

ST_POINTGRID(xmin, ymin, xmax, ymax, cell_side[, limit])  Creates a MULTIPOLYGON containing a squareshaped grid of points between given minimum and maximum points of a bounding box. The minimum point cannot be greater than or equal to the maximum point. The distance between the points (in meters) is determined by cell_side. The cell_side cannot be greater than the width or height of the bounding box. The maximum number of cells that can be produced is determined by limit, a positive integer. Supported values for limit:
If the custom limit request specifies more cells (based on the bounding box and the cell_side) than the system limit, a null is returned. 

ST_POINTN(geom, n)  Returns the nth point in LINESTRING geom. Negative values are valid, but note that they are counted backwards from the end of geom. A null is returned if geom is not a LINESTRING.  
ST_POINTS(geom)  Returns a MULTIPOINT containing all of the coordinates of geom.  
ST_PROJECT(geom, distance, azimuth)  Returns a POINT projected from a start point geom along a geodesic calculated using distance and azimuth. If geom is not a POINT, null is returned.  
ST_REMOVEPOINT(geom, offset)  Remove a point from LINESTRING geom using offset to skip over POINTs in the LINESTRING. The offset is 0based.  
ST_REMOVEREPEATEDPOINTS(geom, tolerance)  Removes points from geom if the point's vertices are greater than or equal to the tolerance of the previous point in the geometry's list. If geom is not a MULTIPOINT, MULTILINESTRING, or a MULTIPOLYGON, no points will be removed.  
ST_REVERSE(geom)  Return the geometry with its coordinate order reversed.  
ST_SCALE(geom, x, y) ST_SCALE(geom, scale_geom) 
Scales geom by multiplying its respective vertices by the given x and y values, when using the 3parameter version. Scales geom by multiplying its respective vertices by the corresponding values in the POINT given in scale_geom, when using the 2parameter version. Example using the 3parameter (x, y) version:
Example using the 2parameter (scale_geom) version:


ST_SEGMENTIZE(geom, max_segment_length[, solution])  Returns the given geom but segmentized n number of times depending on how the max_segment_length distance (in units based on the solution type) divides up the original geometry. The new geom is guaranteed to have segments that are smaller than the given max_segment_length. Note that POINTs are not able to be segmentized. Collection geometries (GEOMETRYCOLLECTION, MULTILINESTRING, MULTIPOINT, etc.) can be segmentized, but only the individual parts will be segmentized, not the collection as a whole. Solution types available:


ST_SETPOINT(geom1, position, geom2)  Replace a point of LINESTRING geom1 with POINT geom2 at position (base 0). Negative values are valid, but note that they are counted backwards from the end of geom.  
ST_SHAREDPATH(geom1, geom2)  Returns a collection containing paths shared by geom1 and geom2.  
ST_SHORTESTLINE(geom1, geom2)  Returns the 2D LINESTRING that represents the shortest line of points between the two geometries. If multiple shortest lines are found, only the first line found is returned. If geom1 or geom2 is empty, null is returned  
ST_SIMPLIFY(geom, tolerance)  Returns a simplified version of the given geom using an algorithm to reduce the number of points comprising a given geometry while attempting to best retain the original shape. The given tolerance determines how much to simplify the geometry. The higher the tolerance, the more simplified the returned geometry. Some holes might be removed and some invalid polygons (e.g., selfintersecting, etc.) might be present in the returned geometry. Only (MULTI)LINESTRINGs and (MULTI)POLYGONs can be simplified, including those found within GEOMETRYCOLLECTIONs; any other geometry objects will be returned unsimplified. Note The tolerance should be provided in the same units as the data. As a rule of thumb, a tolerance of 0.00001 would correspond to about one meter. 

ST_SIMPLIFYPRESERVETOPOLOGY(geom, tolerance)  Returns a simplified version of the given geom using an algorithm to reduce the number of points comprising a given geometry while attempting to best retain the original shape. The given tolerance determines how much to simplify the geometry. The higher the tolerance, the more simplified the returned geometry. No holes will be removed and no invalid polygons (e.g., selfintersecting, etc.) will be present in the returned geometry. Only (MULTI)LINESTRINGs and (MULTI)POLYGONs can be simplified, including those found within GEOMETRYCOLLECTIONs; any other geometry objects will be returned unsimplified. Note The tolerance should be provided in the same units as the data. As a rule of thumb, a tolerance of 0.00001 would correspond to about one meter. 

ST_SNAP(geom1, geom2, tolerance)  Snaps geom1 to geom2 within the given tolerance. If the tolerance causes geom1 to not snap, the geometries will be returned unchanged.  
ST_SPLIT(geom1, geom2)  Returns a collection of geometries resulting from the split between geom1 and geom2 geometries.  
ST_SQUAREGRID(xmin, ymin, xmax, ymax, cell_side[, limit])  Creates a MULTIPOLYGON containing a grid of squares between given minimum and maximum points of a bounding box. The minimum point cannot be greater than or equal to the maximum point. The size (in meters) of the individual squares' sides is determined by cell_side. The cell_side cannot be greater than the width or height of the bounding box. The maximum number of cells that can be produced is determined by limit, a positive integer. Supported values for limit:
If the custom limit request specifies more cells (based on the bounding box and the cell_side) than the system limit, a null is returned. 

ST_STARTPOINT(geom)  Returns the first point of LINESTRING geom as a POINT. Returns null if geom is not a LINESTRING.  
ST_SYMDIFFERENCE(geom1, geom2)  Returns a geometry that represents the portions of geom1 and geom2 geometries that do not intersect.  
ST_TOUCHES(geom1, geom2)  Returns 1 (true) if the given geometries, geom1 and geom2, have at least one point in common but their interiors do not intersect. If geom1 and/or geom2 are a GEOMETRYCOLLECTION, a 0 is returned regardless of if the two geometries touch  
ST_TRANSLATE(geom, deltax, deltay[, deltaz])  Translate geom by given offsets deltax and deltay. A zcoordinate offset can be applied using deltaz.  
ST_TRIANGLEGRID(xmin, ymin, xmax, ymax, cell_side[, limit])  Creates a MULTIPOLYGON containing a grid of triangles between given minimum and maximum points of a bounding box. The minimum point cannot be greater than or equal to the maximum point. The size (in meters) of the individual triangles' sides is determined by cell_side. The cell_side cannot be greater than the width or height of the bounding box. The maximum number of cells that can be produced is determined by limit, a positive integer. Supported values for limit:
If the custom limit request specifies more cells (based on the bounding box and the cell_side) than the system limit, a null is returned. 

ST_UNION(geom1, geom2)  Returns a geometry that represents the point set union of the two given geometries, geom1 and geom2.  
ST_UNIONCOLLECTION(geom)  Returns a geometry that represents the point set union of a single given geometry geom.  
ST_UPDATE(geom1, geom2)  Returns a geometry that is geom1 geometry updated by geom2 geometry  
ST_VORONOIPOLYGONS(geom[, tolerance])  Returns a GEOMETRYCOLLECTION containing Voronoi polygons (regions consisting of points closer to a vertex in geom than any other vertices in geom) calculated from the vertices in geom and the given tolerance. The tolerance determines the distance at which points will be considered the same. An empty GEOMETRYCOLLECTION is returned if geom is an empty geometry, a single POINT, or a LINESTRING or POLYGON composed of equivalent vertices (e.g., POLYGON((0 0, 0 0, 0 0, 0 0)), LINESTRING(0 0, 0 0)). If no tolerance is specified, no vertices will be considered the same; each will have its own polygon. The bounding box for the result POLYGONs extends past the four edges of the input geom bounding box by an amount that is the greater of the input bounding box's height and width. For instance, an input geom with a 3 x 4 bounding box will result in Voronoi polygons filling a space that is 11 x 12. 

ST_WITHIN(geom1, geom2)  Returns 1 (true) if the geom1 geometry is inside the geom2 geometry. Note that as long as at least one point is inside of geom2, geom1 is considered within geom2 even if the rest of the geom1 lies along the boundary of geom2  
ST_WKTTOWKB(geom)  Returns the binary form (WKB) of a geom (WKT) Note This function can only be used in queries against a single table. 

ST_X(geom)  Returns the X coordinate of the POINT geom; if the coordinate is not available, null is returned. geom must be a POINT.  
ST_XMAX(geom)  Alias for ST_MAXX()  
ST_XMIN(geom)  Alias for ST_MINX()  
ST_Y(geom)  Returns the Y coordinate of the POINT geom; if the coordinate is not available, null is returned. geom must be a POINT.  
ST_YMAX(geom)  Alias for ST_MAXY()  
ST_YMIN(geom)  Alias for ST_MINY()  
ST_ZMAX(geom)  Alias for ST_MAXZ()  
ST_ZMIN(geom)  Alias for ST_MINZ() 
Aggregation Functions
Function  Description 

ST_AGGREGATE_COLLECT(geom)  Alias for ST_COLLECT_AGGREGATE() 
ST_AGGREGATE_INTERSECTION(geom)  Alias for ST_INTERSECTION_AGGREGATE() 
ST_COLLECT_AGGREGATE(geom)  Returns a GEOMETRYCOLLECTION comprising all geometries found in the geom set. Any MULTI* geometries will be divided into separate singular geometries, e.g., MULTIPOINT((0 0), (1 1)) would be divided into POINT(0 0) and POINT(1 1) in the results; the same is true for elements of a GEOMETRYCOLLECTION found in geom, where a GEOMETRYCOLLECTION within the provided geom set will also be parsed, effectively flattening it and adding the individual geometries to the resulting GEOMETRYCOLLECTION. Any empty geometries in geom are ignored even if they are part of a GEOMETRYCOLLECTION. Any duplicate WKTs will be retained. 
ST_DISSOLVE(geom)  Dissolves all geometries within a given set into a single geometry. Note that the resulting single geometry can still be a group of noncontiguous geometries but represented as a single group, e.g., a GEOMETRYCOLLECTION. Best performance when used in conjunction with adjacent geometries 
ST_DISSOLVEOVERLAPPING(geom)  Dissolves all geometries within a given set into a single geometry. Note that the resulting single geometry can still be a group of noncontiguous geometries but represented as a single group, e.g., a GEOMETRYCOLLECTION. Best performance when used in conjunction with overlapping geometries 
ST_INTERSECTION_AGGREGATE(geom)  Returns a POLYGON or MULTIPOLYGON comprising the shared portion between all geometries found in the geom set. Returns an empty GEOMETRYCOLLECTION if there is no shared portion between all geometries. Functionally equivalent to ST_INTERSECTION(ST_INTERSECTION(ST_INTERSECTION(geom1, geom2), geom3), ... geomN). 
ST_LINESTRINGFROMORDEREDPOINTS(x, y, t)  Returns a LINESTRING that represents a "track" of the given points (x, y) ordered by the given sort column t (e.g., a timestamp or sequence number). If any of the values in the specified columns are null, the null "point" will be left out of the resulting LINESTRING. If there's only one nonnull "point" in the source table, a POINT is returned. If there are no nonnull "points" in the source table, a null is returned 
ST_LINESTRINGFROMORDEREDPOINTS3D(x, y, z, t)  Returns a LINESTRING that represents a "track" of the given 3D points (x, y, z) ordered by the given sort column t (e.g., a timestamp or sequence number). If any of the values in the specified columns are null, the null "point" will be left out of the resulting LINESTRING. If there's only one nonnull "point" in the source table, a POINT is returned. If there are no nonnull "points" in the source table, a null is returned 
ST_POLYGONIZE(geom)  Returns a GEOMETRYCOLLECTION containing POLYGONs comprising the provided (MULTI)LINESTRING(s). (MULTI)POINT and (MULTI)POLYGON geometries are ignored when calculating the resulting GEOMETRYCOLLECTION. If a valid POLYGON cannot be constructed from the provided (MULTI)LINESTRING(s), an empty GEOMETRYCOLLECTION will be returned. 
Track Functions
The following functions are available in both SQL and the native API.
Function  Description  

ST_TRACKDURATION([unit,] t)  Returns the total time, in the given unit, spanned by timestamp values in column t. Grouping by track ID will return the duration per track. The duration can be returned in any of the following date/time units:
The default unit is MILLISECOND. 

ST_TRACKLENGTH(lat, lon, t[, solution])  Returns the total length of the track whose position values are specified by lat & lon and whose ordering is determined by an ascending sort on the timestamp t. Length can be returned with any of the following solution types:

ST_TRACK_DWITHIN
The ST_TRACK_DWITHIN table function finds tracks that are related, within spatial or temporal bounds (or both) to the given track(s). The track(s) to use as the filter criteria will be specified by the SEARCH_* parameters. The TRACK_* parameters specify the set of tracks to search through for a match.
Note
This function is only available in SQL or in the native API via /execute/sql.
The basic form of the ST_TRACK_DWITHIN function follows.


Parameters  Description  

TRACK_TABLE  Name of the table to search for tracks matching the track(s) specified in the SEARCH_* data set. To perform a search on the flights table, pass the name of the table to INPUT_TABLE: INPUT_TABLE(flights) To perform a search on the result of a query, pass the query to INPUT_TABLE: INPUT_TABLE ( SELECT * FROM flights_west UNION SELECT * FROM flights_east ) 

TRACK_ID_COLUMN  Table to search track column, containing the unique identifier for the track to which each track point belongs.  
TRACK_X_COLUMN  Table to search track column, containing the longitude value of each track point.  
TRACK_Y_COLUMN  Table to search track column, containing the latitude value of each track point.  
TRACK_ORDER_COLUMN  Table to search track column, by which the searched track points will be sorted in ascending order.  
SEARCH_TABLE  Name of the search criteria track table, containing the track(s) to be used as the filter criteria when searching for matching tracks in the TRACK_* data set. To match tracks from the flights_of_interest table, pass the name of the table to INPUT_TABLE: INPUT_TABLE(flights_of_interest) To match tracks from the result of a query, pass the query to INPUT_TABLE: INPUT_TABLE ( SELECT * FROM flights_of_interest_west UNION SELECT * FROM flights_of_interest_east ) 

SEARCH_ID_COLUMN  Search criteria track column, containing the unique identifier for the track to which each track point belongs.  
SEARCH_X_COLUMN  Search criteria track column, containing the longitude value of each track point.  
SEARCH_Y_COLUMN  Search criteria track column, containing the latitude value of each track point.  
SEARCH_ORDER_COLUMN  Search criteria track column, by which the filter track points will be sorted in ascending order.  
SEARCH_XY_DISTANCE  The radius around the given tracks to search for matching tracks. Important This parameter is not applicable when using a SPATIAL_SOLUTION_TYPE of 0.


SPATIAL_SOLUTION_TYPE  Spatial match solution type; any of the following:


SEARCH_TIME_DISTANCE  The maximum allowable time difference between a search criteria track's point and a matched track's points. The time can use any of the following suffices for units:

To see the matches between a set of flights and a given set of flights of interest:


ST_TRACKINTERSECTS
The ST_TRACKINTERSECTS table function finds tracks pass through the given geofence(s). The geofence(s) use as the filter will be specified by the GEOFENCE_* parameters. The TRACK_* parameters specify the set of tracks to search through for any intersecting the geofence(s).
The result will include a record for each intersecting track & geofence pair, with:
 a LINESTRING representing the full track intersecting a geofence
 a LINESTRING representing the geofence it intersected
Note
This function is only available in SQL or in the native API via /execute/sql.
The basic form of the ST_TRACKINTERSECTS function follows.


Parameters  Description 

TRACK_TABLE  Name of the table to search for tracks intersecting the geofence(s) specified in the SEARCH_* data set. To perform a search on the flights table, pass the name of the table to INPUT_TABLE: INPUT_TABLE(flights) To perform a search on the result of a query, pass the query to INPUT_TABLE: INPUT_TABLE ( SELECT * FROM flights_west UNION SELECT * FROM flights_east ) 
TRACK_ID_COLUMN  Table to search track column, containing the unique identifier for the track to which each track point belongs. 
TRACK_X_COLUMN  Table to search track column, containing the longitude value of each track point. 
TRACK_Y_COLUMN  Table to search track column, containing the latitude value of each track point. 
TRACK_ORDER_COLUMN  Table to search track column, by which the searched track points will be sorted in ascending order. 
GEOFENCE_TABLE  Name of the geofence table, containing the WKT(s) to be used as the filter criteria when searching for intersecting tracks in the TRACK_* data set. To search for tracks intersecting the geofence(s) from the flight_area_of_interest table, pass the name of the geofence table to INPUT_TABLE: INPUT_TABLE(flight_area_of_interest) To search for tracks intersecting the geofence(s) from the result of a query, pass the query to INPUT_TABLE: INPUT_TABLE ( SELECT * FROM flight_area_of_interest_west UNION SELECT * FROM flight_area_of_interest_east ) 
GEOFENCE_ID_COLUMN  Geofence column, containing the unique identifier for the geofence. 
GEOFENCE_WKT_COLUMN  Geofence column, containing the WKT bounds of the geofence. 
To see the intersections between a set of flights and an area of interest:


H3 Functions
The functions below support various operations using the H3 geospatial indexing scheme.
Function  Description 

H3_CELLTOBOUNDARY(h3_index)  Returns a POLYGON boundary box of the H3 index identified by the given h3_index. See H3 Geohashing for an example. 
H3_CELLTOCHILDN(h3_index, res, i)  Returns the H3 index corresponding to the i th child at resolution res for the given h3_index. The value i should be less than the number of children returned from calling H3_CELLTOCHILDRENSIZE(h3_index, res). 
H3_CELLTOCHILDRENSIZE(h3_index, res)  Returns the number of child cells at resolution res for the given h3_index. 
H3_CELLTOPARENT(h3_index, res)  Returns the H3 index corresponding to the parent cell of the given h3_index at resolution res. 
H3_CELLTOXY(h3_index)  Returns a WKT POINT corresponding to the centroid of the given h3_index. 
H3_GEOMTOCELL(geom, res)  Returns the H3 index, similar to a geohash, for the cell containing the centroid of the geometry geom with the given resolution res. The higher the resolution, the more precise the index is. The resolution res must be an integer between 0 and 15. See H3 Geohashing for an example. 
H3_GETRESOLUTION(h3_index)  Returns the resolution of the H3 index h3_index. 
H3_H3TOSTRING(h3_index)  Returns the string representation of the H3 index h3_index. Note This function is the inverse of H3_STRINGTOH3. 
H3_ISVALID(h3_index)  Returns 1 (true) if the given H3 index h3_index is a valid H3 index value; otherwise returns 0 (false). 
H3_LATLNGTOCELL (latitude, longitude, res) 
Returns the H3 index, similar to a geohash, for the cell containing the latitude and longitude coordinate, with the given resolution res. The higher the resolution, the more precise the index is. The resolution res must be an integer between 0 and 15. Equivalent to H3_XYTOCELL(longitude, latitude, res). 
H3_STRINGTOH3(h3_string)  Returns the H3 index corresponding to the string representation h3_string. Note This function is the inverse of H3_H3TOSTRING. 
H3_XYTOCELL(x, y, res)  Returns the H3 index, similar to a geohash, for the cell containing the x and y coordinate, with the given resolution res. The higher the resolution, the more precise the index is. The resolution res must be an integer between 0 and 15. Equivalent to H3_LATLNGTOCELL(y, x, res). See H3 Geohashing for an example. 
Math Functions
Function  Description  

ABS(expr)  Calculates the absolute value of expr  
ACOS(expr)  Returns the inverse cosine (arccosine) of expr as a double  
ACOSF(expr)  Returns the inverse cosine (arccosine) of expr as a float  
ACOSH(expr)  Returns the inverse hyperbolic cosine of expr as a double  
ACOSHF(expr)  Returns the inverse hyperbolic cosine of expr as a float  
ASIN(expr)  Returns the inverse sine (arcsine) of expr as a double  
ASINF(expr)  Returns the inverse sine (arcsine) of expr as a float  
ASINH(expr)  Returns the inverse hyperbolic sine of expr as a double  
ASINHF(expr)  Returns the inverse hyperbolic sine of expr as a float  
ATAN(expr)  Returns the inverse tangent (arctangent) of expr as a double  
ATANF(expr)  Returns the inverse tangent (arctangent) of expr as a float  
ATANH(expr)  Returns the inverse hyperbolic tangent of expr as a double  
ATANHF(expr)  Returns the inverse hyperbolic tangent of expr as a float  
ATAN2(x, y)  Returns the inverse tangent (arctangent) using two arguments as a double  
ATAN2F(x, y)  Returns the inverse tangent (arctangent) using two arguments as a float  
ATN2(x, y)  Alias for ATAN2  
ATN2F(x, y)  Alias for ATAN2F  
CBRT(expr)  Returns the cube root of expr as a double  
CBRTF(expr)  Returns the cube root of expr as a float  
CEIL(expr)  Alias for CEILING  
CEILING(expr)  Rounds expr up to the next highest integer  
COS(expr)  Returns the cosine of expr as a double  
COSF(expr)  Returns the cosine of expr as a float  
COSH(expr)  Returns the hyperbolic cosine of expr as a double  
COSHF(expr)  Returns the hyperbolic cosine of expr as a float  
COT(expr)  Returns the cotangent of expr as a double  
COTF(expr)  Returns the cotangent of expr as a float  
DEGREES(expr)  Returns the conversion of expr (in radians) to degrees as a double  
DEGREESF(expr)  Returns the conversion of expr (in radians) to degrees as a float  
DIVZ(a, b, c)  Returns the quotient a / b unless b == 0, in which case it returns c  
EXP(expr)  Returns e to the power of expr as a double  
EXPF(expr)  Returns e to the power of expr as a float  
FLOOR(expr)  Rounds expr down to the next lowest integer  
GREATER(expr_a, expr_b)  Returns whichever of expr_a and expr_b has the larger value, based on typed comparison  
HYPOT(x, y)  Returns the hypotenuse of x and y as a double  
HYPOTF(x, y)  Returns the hypotenuse of x and y as a float  
IFERROR(expr, val)  Alias for IF_ERROR(expr, val)  
IFINF(expr, val)  Alias for IF_INF(expr, val)  
IFINFINITY(expr, val)  Alias for IF_INF(expr, val)  
IFNAN(expr, val)  Alias for IF_NAN(expr, val)  
IF_ERROR(expr, val)  Evaluates the given double or float expr, and if it resolves to infinity or NaN, return val Tip Conceptually, this function is the same as IF_INF(IF_NAN(expr, val), val) Example:


IF_INF(expr, val)  Evaluates the given double or float expr, and if it resolves to infinity, return val Example:


IF_INFINITY(expr, val)  Alias for IF_INF(expr, val)  
IF_NAN(expr, val)  Evaluates the given double or float expr, and if it resolves to NaN, return val Example:


ISINFINITY(expr)  Returns 1 (true) if expr is infinity by IEEE standard; otherwise, returns 0 (false)  
IS_INFINITY(expr)  Alias for ISINFINITY  
ISNAN(expr)  Returns 1 (true) if expr is not a number by IEEE standard; otherwise, returns 0 (false)  
IS_NAN(expr)  Alias for ISNAN  
ISNUMERIC(expr)  Returns 1 (true) if expr is a number by IEEE standard; otherwise, returns 0 (false)  
IS_NUMERIC(expr)  Alias for ISNUMERIC  
LDEXP(x, exp)  Returns the value of x * 2^{exp} as a double  
LDEXPF(x, exp)  Returns the value of x * 2^{exp} as a float  
LESSER(expr_a, expr_b)  Returns whichever of expr_a and expr_b has the smaller value, based on typed comparison  
LN(expr)  Returns the natural logarithm of expr as a double  
LNF(expr)  Returns the natural logarithm of expr as a float  
LOG(expr)  Alias for LN  
LOG10(expr)  Returns the base10 logarithm of expr as a double  
LOG10F(expr)  Returns the base10 logarithm of expr as a float  
LOG1P(expr)  Returns the natural logarithm of one plus expr as a double  
LOG1PF(expr)  Returns the natural logarithm of one plus expr as a float  
LOG2(expr)  Returns the binary (base2) logarithm of expr as a double  
LOG2F(expr)  Returns the binary (base2) logarithm of expr as a float  
LOGF(expr)  Alias for LNF  
MAX_CONSECUTIVE_BITS(expr)  Calculates the length of the longest series of consecutive 1 bits in the integer expr  
MOD(dividend, divisor)  Calculates the remainder after integer division of dividend by divisor  
PI()  Returns the value of pi  
POW(base, exponent)  Alias for POWER  
POWF(base, exponent)  Alias for POWERF  
POWER(base, exponent)  Returns base raised to the power of exponent as a double  
POWERF(base, exponent)  Returns base raised to the power of exponent as a float  
RADIANS(expr)  Returns the conversion of expr (in degrees) to radians as a double  
RADIANSF(expr)  Returns the conversion of expr (in degrees) to radians as a float  
RAND([seed])  Returns a random floatingpoint value, with an optional seed  
REGR_VALX(y, x)  Returns NULL if y is NULL; otherwise, returns x  
REGR_VALY(y, x)  Returns NULL if x is NULL; otherwise, returns y  
ROUND(expr[, scale])  Rounds expr to the nearest decimal number with scale decimal places when scale is a positive number; rounds to the nearest number such that the result has (scale) zeros to the left of the decimal point when scale is negative; use scale of 0 to round to the nearest integer. The default value of scale is 0. Examples:


SIGN(expr)  Determines whether a number is positive, negative, or zero; returns one of the following three values:


SIN(expr)  Returns the sine of expr as a double  
SINF(expr)  Returns the sine of expr as a float  
SINH(expr)  Returns the hyperbolic sine of expr as a double  
SINHF(expr)  Returns the hyperbolic sine of expr as a float  
SQRT(expr)  Returns the square root of expr as a double  
SQRTF(expr)  Returns the square root of expr as a float  
TAN(expr)  Returns the tangent of expr as a double  
TANF(expr)  Returns the tangent of expr as a float  
TANH(expr)  Returns the hyperbolic tangent of expr as a double  
TANHF(expr)  Returns the hyperbolic tangent of expr as a float  
TRUNCATE(expr[, scale])  Rounds expr down to the nearest decimal number with scale decimal places when scale is a positive number; rounds down to the nearest number such that the result has (scale) zeros to the left of the decimal point when scale is negative; use scale of 0 to round down to the nearest integer. The default value of scale is 0. Examples:


WIDTH_BUCKET(expr, min, max, count)  Defines a set of count equal intervals (buckets) within the range of min & max, and puts the value of expr into one of those buckets, where the value is greater than or equal to the minimum value of the bucket and less than the maximum value of the bucket. Returns the 1based number of the bucket into which the value of expr fell. For values smaller than min, 0 is returned; for values greater than or equal to max, count + 1 is returned. Examples: In the following examples, a set of 5 equal buckets are defined between 0 and 10 (02, 24, 46, 68, & 810), and various values are bucketed using that set.

Null Functions
Important
Be mindful that no error is thrown when Kinetica tries to convert different data type in the Null functions below, so if the output is unexpected, it may be that the types used aren't of the same type.
Function  Description 

IS_NULL(expr)  Returns 1 (true) if expr is null; otherwise, returns 0 (false) 
ISNULL(expr)  Alias for IS_NULL(expr) 
NULLIF(expr_a, expr_b)  Returns null if expr_a equals expr_b; otherwise, returns the value of expr_a. Both expressions should be of the same convertible data type 
NVL(expr_a, expr_b)  Returns expr_a if it is not null; otherwise, returns expr_b. Both expressions should be of the same convertible data type; see ShortCircuiting for errorchecking details 
NVL2(expr, value_if_not_null, value_if_null)  Evaluates expr: if expr does not return a null, value_if_not_null is returned. If expr does return a null, value_if_null is returned. Both value_if_not_null and value_if_null should be of the same data type as expr or implicitly convertible; see ShortCircuiting for errorchecking details 
REMOVE_NULLABLE(expr)  Alias for ZEROIFNULL 
ZEROIFNULL(expr)  Replaces null values with appropriate values based on the column type (e.g., 0 if numeric column, an empty string if charN column, etc.). Also removes the nullable column property if used to calculate a derived column. 
String Functions
Important
The following functions will only work with fixedwidth string fields (char1  char256). These types are stored as byte arrays, but allow multibyte characters, as they are UTF8 encoded. Some functions may behave in unexpected ways when given multibyte input.
Function  Description  

ASCII(expr)  Returns the ASCII code for the first byte in expr  
CHAR(expr)  The character represented by the standard ASCII code expr in the range [ 0  127 ]  
CONCAT(expr_a, expr_b)  Performs a string concatenation of expr_a & expr_b; use nested CONCAT calls to concatenate more than two strings Note The resulting field size of any CONCAT will be a charN field big enough to hold the concatenated fields, e.g., concatenating a char32 column and a char64 column will result in a char128 column. Columns of type char256 cannot be used with CONCAT. 

CONCAT_TRUNCATE(expr_a, expr_b)  Returns the concatenation of expr_a and expr_b, truncated at the maximum size of expr_a. For columns, this size is explicit; for string constants, this will be the smallest charN type that can hold the expr_a string. Examples:


CONTAINS(match_expr, ref_expr)  Returns 1 if ref_expr contains match_expr by stringliteral comparison; otherwise, returns 0  
DIFFERENCE(expr_a, expr_b)  Returns a value between 0 and 4 that represents the difference between the sounds of expr_a and expr_b based on the SOUNDEX() value of the stringsa value of 4 is the best possible sound match  
EDIT_DISTANCE(expr_a, expr_b)  Returns the Levenshtein edit distance between expr_a and expr_b; the lower the the value, the more similar the two strings are  
ENDS_WITH(match_expr, ref_expr)  Returns 1 if ref_expr ends with match_expr by stringliteral comparison; otherwise, returns 0  
INITCAP(expr)  Returns expr with the first letter of each word in uppercase  
IPV4_PART(expr, part_num)  Returns the octet of the IP address given in expr at the position specified by part_num. Valid part_num values are constants from 1 to 4. Examples:


IS_IPV4(expr)  Returns 1 if expr is an IPV4 address; returns 0 otherwise  
ISIPV4(expr)  Alias for IS_IPV4  
LCASE(expr)  Converts expr to lowercase  
LEFT(expr, num_bytes)  Returns the leftmost num_bytes bytes from expr  
LEN(expr)  Alias for LENGTH  
LENGTH(expr)  Returns the number of characters in expr  
LIKE(ref_expr, match_expr[, esc_char])  Returns whether ref_expr matches the given match_expr. The match is a string literal one with the following exceptions:
By default, the escape character used to match wildcards in the ref_expr literally is \. The esc_char, if given, will override this default escape character. Note The match expression has to match the reference expression completelyit will not return true for partial matches. Examples of successful matches:


LOCATE(match_expr, ref_expr[, start_pos])  Returns the starting position of the first match of match_expr in ref_expr, starting from position 1 or start_pos (if specified). If match_expr can't be found or start_pos is outside the range of letters in ref_expr, a 0 is returned.  
LOWER(expr)  Alias for LCASE  
LPAD(base_expr, length, pad_expr)  Left pads the given base_expr string with the pad_expr string to the given length of bytes. If base_expr is longer than length, the return value is shortened to length bytes. If length is larger than 256, it will be truncated to 256 bytes. Caution! The use of multibyte characters in this function may have unexpected results. Examples:


LTRIM(expr)  Removes whitespace from the left side of expr  
POSITION(match_expr, ref_expr[, start_pos])  Alias for LOCATE  
REGEXP_LIKE(expr, regex[, options])  Returns whether expr matches the given regex. Generally, POSIXcompliant regular expressions are supported. A caseinsensitive match can be induced by passing i in for the optional options string. The escape character used to match wildcards in the expr literally is \. Note The regex can match the expr partially. To perform full matches, ^ and $ can be used to match the beginning & end of expr, respectively. Examples of successful matches:


REGEXP_MATCH(expr, regex[, options])  Alias for REGEXP_LIKE  
REPLACE(ref_expr, match_expr, repl_expr)  Replaces every occurrence of match_expr in ref_expr with repl_expr  
REPLACE_CHAR (ref_expr, match_char, repl_char)  Replaces every occurrence of the singlebyte character match_char in ref_expr with the singlebyte character repl_char  
REPLACE_TRUNCATE (ref_expr, match_expr, repl_expr)  Replaces every occurrence of match_expr in ref_expr with repl_expr, and then truncates the resulting string at 256 bytes if it is longer than that Caution! The use of multibyte characters in this function may have unexpected results. 

REVERSE(expr)  Returns expr with the order of bytes reversed. Caution! The use of multibyte characters in this function may have unexpected results. Examples:


RIGHT(expr, num_bytes)  Returns the rightmost num_bytes bytes from expr  
RPAD(base_expr, length, pad_expr)  Right pads the given base_expr string with the pad_expr string to the given length of bytes. If base_expr is longer than length, the return value is shortened to length bytes. If length is larger than 256, it will be truncated to 256 bytes. Caution! The use of multibyte characters in this function may have unexpected results. Examples:


RTRIM(expr)  Removes whitespace from the right side of expr  
SOUNDEX(expr)  Returns a soundex value from expr. Only the first word in the string will be considered in the calculation. Note This is the algorithm used by most programming languages 

SPACE(n)  Returns a string consisting of n space characters. The value of n can only be within the range of 0256.  
SPLIT(expr, delim, group_num)  Splits expr into groups delimited by the delim singlebyte character and returns the group_num split group. If group_num is positive, groups will be counted from the beginning of expr; if negative, groups will be counted from the end of expr going backwards. Two consecutive delimiters will result in an empty string being added to the list of selectable groups. If no instances of delim exist in expr, the entire string is available at group 1 (and 1). Group 0 returns nothing. Examples:


STARTS_WITH(match_expr, ref_expr)  Returns 1 if ref_expr starts with match_expr by stringliteral comparison; otherwise, returns 0  
STRCMP(expr_a, expr_b)  Compares expr_a to expr_b in a lexicographical sort


SUBSTR(expr, start_pos[, num_chars])  Alias for SUBSTRING  
SUBSTRING(expr, start_pos[, num_bytes])  Returns num_bytes bytes from the expr, starting at the 1based start_pos byte. If num_bytes is not specified, all bytes after start_pos will be returned. Caution! The use of multibyte characters in this function may have unexpected results. Examples:


TRIM(expr)  Removes whitespace from both sides of expr  
UCASE(expr)  Converts expr to uppercase  
UPPER(expr)  Alias for UCASE 
User/Security Functions
Function  Description  

CURRENT_SCHEMA()  Returns the default schema of the current user  
CURRENT_USER()  Alias for USER  
HASH(column[, seed])  Returns a nonnegative integer representing an obfuscated version of column, using the given seed; default seed is 0  
IS_MEMBER(role[, user]) or IS_ROLEMEMBER(role[, user]) 
Returns whether the current user (or the given user, if specified) has been assigned the given role, either directly or indirectly:


MASK(expr, start, length[, char])  Masks length bytes of expr, beginning at the byte position identified by start, with * characters (or the singlebyte character specified in char): Caution! The use of multibyte characters in this function may have unexpected results.


NEW_UUID()  Returns a randomlygenerated UUID  
OBFUSCATE(column[, seed])  Alias for HASH  
SHA256(expr)  Returns the hex digits of the SHA256 hash of the given value expr as a char64 string.  
SYSTEM_USER()  Alias for USER  
USER()  Returns the username of the current user 
Column Expressions
Many of the functions above accept expressions as inputs in place of column names for selecting data from tables e.g. /aggregate/minmax. Given below are some examples of column expressions:
(x + y) (2 * col1) + col2
Filter Expressions
Data can be filtered with the use of filter expressions within many endpoints; e.g., /filter. These expressions may contain column expressions as well as tests for equality/inequality for selecting records from the database. A filter expression cannot contain aggregation functions and should evaluate to a logical value ( true or false ). When the result of an expression evaluation is a numerical value, the result is converted to a logical value as follows: 0 is considered false and any other value is considered as true. Some examples of filter expressions are given below:
(x > y) (a != b) or (c = d) (timestamp > 1456749296789) and (x <= 10.0) ABS(timestamp  1456749296789) < 60 * 60 * 1000 QUARTER(timestamp) = 1 and MOD(YEAR(timestamp), 4) = 0 msg_id == 'MSGID1' (x = 5) and y in (10,20,30)
Aggregate Expressions
Some endpoints accept aggregation expressions as inputs for selecting data from tables, e.g., /aggregate/groupby. Such expressions can only contain aggregation functions and nonnested functions of aggregation functions.
Function  Description 

APPROX_COUNT_DISTINCT(expr)  The approximate number of distinct values of expr; this is faster to calculate than COUNT_DISTINCT but is only an approximation 
APPROX_MEDIAN(expr)  The approximate median of expr; the result should be within about 2% of the true median value. This is equivalent to issuing APPROX_PERCENTILE(expr, 50). 
APPROX_PERCENTILE(expr, p)  The approximate pth percentile of expr; p should be a value between 0.0 and 100.0. APPROX_PERCENTILE(expr, 50) will return the approximate median of expr. 
ARG_MIN(agg_expr, ret_expr)  The value of ret_expr where agg_expr is the minimum value (e.g. ARG_MIN(cost, product_id) returns the product ID of the lowest cost product) 
ARG_MAX(agg_expr, ret_expr)  The value of ret_expr where agg_expr is the maximum value (e.g. ARG_MAX(cost, product_id) returns the product ID of the highest cost product) 
AVG(expr)  The average of values of expr 
CORR(expr1, expr2)  Calculates the correlation coefficient of expr1 and expr2 
CORRELATION(expr1, expr2)  Alias for CORR 
CORRCOEF(expr1, expr2)  Alias for CORR 
COUNT(expr)  Count of nonnull values of expr; use * to count all values within an aggregation group or over an entire table 
COUNT_DISTINCT(expr)  Count of the distinct values of expr 
COV(expr1, expr2)  Alias for COVAR_POP 
COVAR(expr1, expr2)  Alias for COVAR_POP 
COVARIANCE(expr1, expr2)  Alias for COVAR_POP 
COVAR_POP(expr1, expr2)  Calculates the population covariance of expr1 and expr2 
COVAR_SAMP(expr1, expr2)  Calculates the sample covariance of expr1 and expr2 
GROUPING(expr)  Used primarily with Rollup, Cube, and Grouping Sets, to distinguish the source of null values in an aggregated result set, returns whether expr is part of the aggregation set used to calculate the values in a given result set row. Returns 0 if expr is part of the row's aggregation set, 1 if expr is not (meaning that aggregation took place across all expr values). For example, in a ROLLUP(A) operation, there will be two potential rows with null in the result set for column A. One row will contain null values of A aggregated together, and the other will contain null, but be an aggregation over the entire table, irrespective of A values. In this case, GROUPING(A) will return 0 for the null values of A aggregated together (as well as all other grouped A values) and 1 for the row resulting from aggregating across all A values. 
KURT(expr)  Alias for KURTOSIS_POP 
KURTOSIS(expr)  Alias for KURTOSIS_POP 
KURTOSIS_POP(expr)  Calculate the population kurtosis of expr 
KURTOSIS_SAMP(expr)  Calculate the sample kurtosis of expr 
KURT_POP(expr)  Alias for KURTOSIS_POP 
KURT_SAMP(expr)  Alias for KURTOSIS_SAMP 
MAX(expr)  The maximum of values of expr 
MEAN(expr)  Alias for AVG 
MIN(expr)  The minimum of values of expr 
PRODUCT(expr)  The product of values of expr 
REGR_AVGX(y, x)  Average of the independent variable (SUM(x)/N) of the line determined by computing a leastsquaresfit linear regression over the given (X, Y) pairs 
REGR_AVGY(y, x)  Average of the dependent variable (SUM(y)/N) of the line determined by computing a leastsquaresfit linear regression over the given (X, Y) pairs 
REGR_COUNT(y, x)  Number of input rows used in computing a linear regression, where both expressions are nonnull 
REGR_INTERCEPT(y, x)  Yintercept of the line determined by computing a leastsquaresfit linear regression over the given (X, Y) pairs 
REGR_R2(y, x)  Square of the correlation coefficient, marking how well the leastsquaresfit linear regression fit the data set 
REGR_SLOPE(y, x)  Slope of the line determined by computing a leastsquaresfit linear regression over the given (X, Y) pairs 
REGR_SXX(y, x)  "Sum of squares" of the independent variable (SUM(x^2)  SUM(x)^2/N) of the line determined by computing a leastsquaresfit linear regression over the given (X, Y) pairs 
REGR_SXY(y, x)  "Sum of Products" of independent variable times dependent variable (SUM(x * y)  SUM(x) * SUM(y)/N) of the line determined by computing a leastsquaresfit linear regression over the given (X, Y) pairs 
REGR_SYY(y, x)  "Sum of squares" of the dependent variable (SUM(y^2)  SUM(y)^2/N) of the line determined by computing a leastsquaresfit linear regression over the given (X, Y) pairs 
SKEW(expr)  Alias for SKEWNESS_POP 
SKEWNESS(expr)  Alias for SKEWNESS_POP 
SKEWNESS_POP(expr)  Calculate the population skew of expr 
SKEWNESS_SAMP(expr)  Calculate the sample skew of expr 
SKEW_POP(expr)  Alias for SKEWNESS_POP 
SKEW_SAMP(expr)  Alias for SKEWNESS_SAMP 
STDDEV(expr)  The population standard deviation over values of expr (i.e. the denominator is N) 
STDDEV_POP(expr)  The population standard deviation over values of expr (i.e. the denominator is N) 
STDDEV_SAMP(expr)  The sample standard deviation over values of expr (i.e. the denominator is N1) 
SUM(expr)  The sum of values of expr 
VAR(expr)  The population variance over values of expr (i.e. the denominator is N) 
VAR_POP(expr)  The population variance over values of expr (i.e. the denominator is N) 
VAR_SAMP(expr)  The sample variance over values of expr (i.e. the denominator is N1) 
VARIANCE(expr)  Alias for VAR 
VARIANCE_POP(expr)  Alias for VAR_POP 
VARIANCE_SAMP(expr)  Alias for VAR_SAMP 
Some examples of aggregate expressions:
SUM(sale_price)  SUM(base_price) MAX(CEIL(x))  MIN(FLOOR(x)) AVG(ABS(z  100.0))
ShortCircuiting
The logical operators and & or implement a version of boolean shortcircuiting where if either side of the expression encounters an error (dividebyzero, etc.) but the other side evaluates to a value that alone would determine the overall value of the logical expression, the error will be ignored and the logical value returned:
 If one side of an and evaluates to false and the other side evaluates to an error, false will be returned.
 If one side of an or evaluates to true and the other side evaluates to an error, true will be returned.
In the normal case, both sides of either of these operators would be evaluated simultaneously. However, to allow these operators to be used to check for error conditions, if an error is encountered on either side but the other side is enough information to determine the overall value of the expression, the error will be ignored.
This same behavior applies to the evaluation branches of the following functions:
 IF
 NVL
 NVL2
It also applies to SQL conditional functions.