<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.8.1 from target/generated-site/markdown/sqlpp/builtins.md at 2021-07-16
 | Rendered using Apache Maven Fluido Skin 1.7
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20210716" />
    <meta http-equiv="Content-Language" content="en" />
    <title>AsterixDB &#x2013; Builtin Functions</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.7.min.css" />
    <link rel="stylesheet" href="../css/site.css" />
    <link rel="stylesheet" href="../css/print.css" media="print" />
    <script type="text/javascript" src="../js/apache-maven-fluido-1.7.min.js"></script>

  </head>
  <body class="topBarDisabled">
    <div class="container-fluid">
      <div id="banner">
        <div class="pull-left"><a href=".././" id="bannerLeft"><img src="../images/asterixlogo.png"  alt="AsterixDB"/></a></div>
        <div class="pull-right"></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        <li id="publishDate">Last Published: 2021-07-16</li>
      <li id="projectVersion" class="pull-right">Version: 0.9.7</li>
      <li class="pull-right"><a href="../index.html" title="Documentation Home">Documentation Home</a></li>
        </ul>
      </div>
      <div class="row-fluid">
        <div id="leftColumn" class="span2">
          <div class="well sidebar-nav">
    <ul class="nav nav-list">
      <li class="nav-header">Get Started - Installation</li>
    <li><a href="../ncservice.html" title="Option 1: using NCService"><span class="none"></span>Option 1: using NCService</a></li>
    <li><a href="../ansible.html" title="Option 2: using Ansible"><span class="none"></span>Option 2: using Ansible</a></li>
    <li><a href="../aws.html" title="Option 3: using Amazon Web Services"><span class="none"></span>Option 3: using Amazon Web Services</a></li>
      <li class="nav-header">AsterixDB Primer</li>
    <li><a href="../sqlpp/primer-sqlpp.html" title="Using SQL++"><span class="none"></span>Using SQL++</a></li>
      <li class="nav-header">Data Model</li>
    <li><a href="../datamodel.html" title="The Asterix Data Model"><span class="none"></span>The Asterix Data Model</a></li>
      <li class="nav-header">Queries</li>
    <li><a href="../sqlpp/manual.html" title="The SQL++ Query Language"><span class="none"></span>The SQL++ Query Language</a></li>
    <li><a href="../SQLPP.html" title="Raw SQL++ Grammar"><span class="none"></span>Raw SQL++ Grammar</a></li>
    <li class="active"><a href="#"><span class="none"></span>Builtin Functions</a></li>
      <li class="nav-header">API/SDK</li>
    <li><a href="../api.html" title="HTTP API"><span class="none"></span>HTTP API</a></li>
    <li><a href="../csv.html" title="CSV Output"><span class="none"></span>CSV Output</a></li>
      <li class="nav-header">Advanced Features</li>
    <li><a href="../aql/externaldata.html" title="Accessing External Data"><span class="none"></span>Accessing External Data</a></li>
    <li><a href="../feeds.html" title="Data Ingestion with Feeds"><span class="none"></span>Data Ingestion with Feeds</a></li>
    <li><a href="../udf.html" title="User Defined Functions"><span class="none"></span>User Defined Functions</a></li>
    <li><a href="../sqlpp/filters.html" title="Filter-Based LSM Index Acceleration"><span class="none"></span>Filter-Based LSM Index Acceleration</a></li>
    <li><a href="../sqlpp/fulltext.html" title="Support of Full-text Queries"><span class="none"></span>Support of Full-text Queries</a></li>
    <li><a href="../sqlpp/similarity.html" title="Support of Similarity Queries"><span class="none"></span>Support of Similarity Queries</a></li>
    <li><a href="../interval_join.html" title="Support of Interval Joins"><span class="none"></span>Support of Interval Joins</a></li>
    <li><a href="../sqlpp/arrayindex.html" title="Support of Array Indexes"><span class="none"></span>Support of Array Indexes</a></li>
      <li class="nav-header">Deprecated</li>
    <li><a href="../aql/primer.html" title="AsterixDB Primer: Using AQL"><span class="none"></span>AsterixDB Primer: Using AQL</a></li>
    <li><a href="../aql/manual.html" title="Queries: The Asterix Query Language (AQL)"><span class="none"></span>Queries: The Asterix Query Language (AQL)</a></li>
    <li><a href="../aql/builtins.html" title="Queries: Builtin Functions (AQL)"><span class="none"></span>Queries: Builtin Functions (AQL)</a></li>
</ul>
          <hr />
          <div id="poweredBy">
            <div class="clear"></div>
            <div class="clear"></div>
            <div class="clear"></div>
            <div class="clear"></div>
<a href=".././" title="AsterixDB" class="builtBy"><img class="builtBy"  alt="AsterixDB" src="../images/asterixlogo.png"    /></a>
            </div>
          </div>
        </div>
        <div id="bodyColumn"  class="span10" >
<!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
<h1>Builtin Functions</h1><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->

<div class="section">
<h2><a name="Table_of_Contents"></a><a name="toc" id="toc">Table of Contents</a></h2>
<ul>

<li><a href="#NumericFunctions">Numeric Functions</a></li>
<li><a href="#StringFunctions">String Functions</a></li>
<li><a href="#BinaryFunctions">Binary Functions</a></li>
<li><a href="#SpatialFunctions">Spatial Functions</a></li>
<li><a href="#SimilarityFunctions">Similarity Functions</a></li>
<li><a href="#TokenizingFunctions">Tokenizing Functions</a></li>
<li><a href="#TemporalFunctions">Temporal Functions</a></li>
<li><a href="#ObjectFunctions">Object Functions</a></li>
<li><a href="#AggregateFunctions">Aggregate Functions (Array Functions)</a></li>
<li><a href="#ComparisonFunctions">Comparison Functions</a></li>
<li><a href="#TypeFunctions">Type Functions</a></li>
<li><a href="#ConditionalFunctions">Conditional Functions</a></li>
<li><a href="#MiscFunctions">Miscellaneous Functions</a></li>
<li><a href="#BitwiseFunctions">Bitwise Functions</a></li>
<li><a href="#WindowFunctions">Window Functions</a></li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->

<p>The system provides various classes of functions to support operations on numeric, string, spatial, and temporal data. This document explains how to use these functions.</p><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div>
<div class="section">
<h2><a name="Numeric_Functions"></a><a name="NumericFunctions" id="NumericFunctions">Numeric Functions</a></h2>
<div class="section">
<h3><a name="abs"></a>abs</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">abs(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the absolute value of the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>The absolute value of the argument with the same type as the input argument,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: abs(2013), &quot;v2&quot;: abs(-4036), &quot;v3&quot;: abs(0), &quot;v4&quot;: abs(float(&quot;-2013.5&quot;)), &quot;v5&quot;: abs(double(&quot;-2013.593823748327284&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 2013, &quot;v2&quot;: 4036, &quot;v3&quot;: 0, &quot;v4&quot;: 2013.5, &quot;v5&quot;: 2013.5938237483274 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="acos"></a>acos</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">acos(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the arc cosine value of the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the <tt>double</tt> arc cosine in radians for the argument, if the argument is in the range of -1 (inclusive) to 1 (inclusive),</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error,</li>
<li>&#x201c;NaN&#x201d; for other legitimate numeric values.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: acos(1), &quot;v2&quot;: acos(2), &quot;v3&quot;: acos(0), &quot;v4&quot;: acos(float(&quot;0.5&quot;)), &quot;v5&quot;: acos(double(&quot;-0.5&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 0.0, &quot;v2&quot;: &quot;NaN&quot;, &quot;v3&quot;: 1.5707963267948966, &quot;v4&quot;: 1.0471975511965979, &quot;v5&quot;: 2.0943951023931957 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="asin"></a>asin</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">asin(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the arc sine value of the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the <tt>double</tt> arc sin in radians for the argument, if the argument is in the range of -1 (inclusive) to 1 (inclusive),</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error,</li>
<li>&#x201c;NaN&#x201d; for other legitimate numeric values.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: asin(1), &quot;v2&quot;: asin(2), &quot;v3&quot;: asin(0), &quot;v4&quot;: asin(float(&quot;0.5&quot;)), &quot;v5&quot;: asin(double(&quot;-0.5&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 1.5707963267948966, &quot;v2&quot;: &quot;NaN&quot;, &quot;v3&quot;: 0.0, &quot;v4&quot;: 0.5235987755982989, &quot;v5&quot;: -0.5235987755982989 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="atan"></a>atan</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">atan(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the arc tangent value of the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the <tt>double</tt> arc tangent in radians for the argument,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: atan(1), &quot;v2&quot;: atan(2), &quot;v3&quot;: atan(0), &quot;v4&quot;: atan(float(&quot;0.5&quot;)), &quot;v5&quot;: atan(double(&quot;1000&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 0.7853981633974483, &quot;v2&quot;: 1.1071487177940904, &quot;v3&quot;: 0.0, &quot;v4&quot;: 0.4636476090008061, &quot;v5&quot;: 1.5697963271282298 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="atan2"></a>atan2</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">atan2(numeric_value1, numeric_value2)
</pre></div></div>
</li>
<li>

<p>Computes the arc tangent value of numeric_value2/numeric_value1.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value1</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value,</li>
<li><tt>numeric_value2</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the <tt>double</tt> arc tangent in radians for <tt>numeric_value1</tt> and <tt>numeric_value2</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: atan2(1, 2), &quot;v2&quot;: atan2(0, 4), &quot;v3&quot;: atan2(float(&quot;0.5&quot;), double(&quot;-0.5&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 0.4636476090008061, &quot;v2&quot;: 0.0, &quot;v3&quot;: 2.356194490192345 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="ceil"></a>ceil</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">ceil(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the smallest (closest to negative infinity) number with no fractional part that is not less than the value of the argument. If the argument is already equal to mathematical integer, then the result is the same as the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>The ceiling value for the given number in the same type as the input argument,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: ceil(2013),
  &quot;v2&quot;: ceil(-4036),
  &quot;v3&quot;: ceil(0.3),
  &quot;v4&quot;: ceil(float(&quot;-2013.2&quot;)),
  &quot;v5&quot;: ceil(double(&quot;-2013.893823748327284&quot;))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 2013, &quot;v2&quot;: -4036, &quot;v3&quot;: 1.0, &quot;v4&quot;: -2013.0, &quot;v5&quot;: -2013.0 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="cos"></a>cos</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">cos(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the cosine value of the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the <tt>double</tt> cosine value for the argument,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: cos(1), &quot;v2&quot;: cos(2), &quot;v3&quot;: cos(0), &quot;v4&quot;: cos(float(&quot;0.5&quot;)), &quot;v5&quot;: cos(double(&quot;1000&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 0.5403023058681398, &quot;v2&quot;: -0.4161468365471424, &quot;v3&quot;: 1.0, &quot;v4&quot;: 0.8775825618903728, &quot;v5&quot;: 0.562379076290703 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="cosh"></a>cosh</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">cosh(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the hyperbolic cosine value of the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the <tt>double</tt> hyperbolic cosine value for the argument,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: cosh(1), &quot;v2&quot;: cosh(2), &quot;v3&quot;: cosh(0), &quot;v4&quot;: cosh(float(&quot;0.5&quot;)), &quot;v5&quot;: cosh(double(&quot;8&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 1.5430806348152437, &quot;v2&quot;: 3.7621956910836314, &quot;v3&quot;: 1.0, &quot;v4&quot;: 1.1276259652063807, &quot;v5&quot;: 1490.479161252178 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="degrees"></a>degrees</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">degrees(numeric_value)
</pre></div></div>
</li>
<li>

<p>Converts radians to degrees</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>The degrees value for the given radians value. The returned value has type <tt>double</tt>,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: degrees(pi()) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 180.0 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="e"></a>e</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">e()
</pre></div></div>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>e (base of the natural logarithm)</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: e() };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 2.718281828459045 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="exp"></a>exp</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">exp(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes e<sup>numeric_value</sup>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>e<sup>numeric_value</sup>,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: exp(1), &quot;v2&quot;: exp(2), &quot;v3&quot;: exp(0), &quot;v4&quot;: exp(float(&quot;0.5&quot;)), &quot;v5&quot;: exp(double(&quot;1000&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 2.718281828459045, &quot;v2&quot;: 7.38905609893065, &quot;v3&quot;: 1.0, &quot;v4&quot;: 1.6487212707001282, &quot;v5&quot;: &quot;Infinity&quot; }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="floor"></a>floor</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">floor(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the largest (closest to positive infinity) number with no fractional part that is not greater than the value. If the argument is already equal to mathematical integer, then the result is the same as the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>The floor value for the given number in the same type as the input argument,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: floor(2013),
  &quot;v2&quot;: floor(-4036),
  &quot;v3&quot;: floor(0.8),
  &quot;v4&quot;: floor(float(&quot;-2013.2&quot;)),
  &quot;v5&quot;: floor(double(&quot;-2013.893823748327284&quot;))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 2013, &quot;v2&quot;: -4036, &quot;v3&quot;: 0.0, &quot;v4&quot;: -2014.0, &quot;v5&quot;: -2014.0 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="ln"></a>ln</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">ln(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes log<sub>e</sub>numeric_value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>log<sub>e</sub>numeric_value,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: ln(1), &quot;v2&quot;: ln(2), &quot;v3&quot;: ln(0), &quot;v4&quot;: ln(float(&quot;0.5&quot;)), &quot;v5&quot;: ln(double(&quot;1000&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 0.0, &quot;v2&quot;: 0.6931471805599453, &quot;v3&quot;: &quot;-Infinity&quot;, &quot;v4&quot;: -0.6931471805599453, &quot;v5&quot;: 6.907755278982137 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="log"></a>log</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">log(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes log<sub>10</sub>numeric_value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>log<sub>10</sub>numeric_value,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: log(1), &quot;v2&quot;: log(2), &quot;v3&quot;: log(0), &quot;v4&quot;: log(float(&quot;0.5&quot;)), &quot;v5&quot;: log(double(&quot;1000&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 0.0, &quot;v2&quot;: 0.3010299956639812, &quot;v3&quot;: &quot;-Infinity&quot;, &quot;v4&quot;: -0.3010299956639812, &quot;v5&quot;: 3.0 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="pi"></a>pi</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">pi()
</pre></div></div>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>Pi</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: pi() };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 3.141592653589793 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="power"></a>power</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">power(numeric_value1, numeric_value2)
</pre></div></div>
</li>
<li>

<p>Computes numeric_value1<sup>numeric_value2</sup>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value1</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value,</li>
<li><tt>numeric_value2</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>numeric_value1<sup>numeric_value2</sup>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: power(1, 2), &quot;v3&quot;: power(0, 4), &quot;v4&quot;: power(float(&quot;0.5&quot;), double(&quot;-0.5&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 1, &quot;v3&quot;: 0, &quot;v4&quot;: 1.4142135623730951 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="radians"></a>radians</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">radians(numeric_value)
</pre></div></div>
</li>
<li>

<p>Converts degrees to radians</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>The radians value for the given degrees value. The returned value has type <tt>double</tt>,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: radians(180) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 3.141592653589793 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="round"></a>round</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">round(numeric_value[, round_digit])
</pre></div></div>
</li>
<li>

<p>Rounds the value to the given number of integer digits to the right of the decimal point, or to the left of the decimal point if the number of digits is negative.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value that represents the numeric value to be rounded.</li>
<li><tt>round_digit</tt>: (Optional) a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value that specifies the digit to round to. This argument may be positive or negative; positive indicating that rounding needs to be to the right of the decimal point, and negative indicating that rounding needs to be to the left of the decimal point. Values such as 1.0 and 2.0 are acceptable, but values such as 1.3 and 1.5 result in a <tt>null</tt>. If omitted, the default is 0.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>The rounded value for the given number. The returned value has the following type:
<ul>

<li><tt>bigint</tt> if the input value has type <tt>tinyint</tt>, <tt>smallint</tt>, <tt>integer</tt> or <tt>bigint</tt>,</li>
<li><tt>float</tt> if the input value has type <tt>float</tt>,</li>
<li><tt>double</tt> if the input value has type <tt>double</tt>;</li>
</ul>
</li>
<li><tt>missing</tt> if the input value is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the input value is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will return a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: round(2013),
  &quot;v2&quot;: round(-4036),
  &quot;v3&quot;: round(0.8),
  &quot;v4&quot;: round(float(&quot;-2013.256&quot;)),
  &quot;v5&quot;: round(double(&quot;-2013.893823748327284&quot;))
  &quot;v6&quot;: round(123456, -1),
  &quot;v7&quot;: round(456.456, 2),
  &quot;v8&quot;: round(456.456, -1),
  &quot;v9&quot;: round(-456.456, -2)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 2013, &quot;v2&quot;: -4036, &quot;v3&quot;: 1.0, &quot;v4&quot;: -2013.0, &quot;v5&quot;: -2014.0, &quot;v6&quot;: 123460, &quot;v7&quot;: 456.46, &quot;v8&quot;: 460, &quot;v9&quot;: -500 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="sign"></a>sign</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">sign(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the sign of the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the sign (a <tt>tinyint</tt>) of the argument, -1 for negative values, 0 for 0, and 1 for positive values,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: sign(1), &quot;v2&quot;: sign(2), &quot;v3&quot;: sign(0), &quot;v4&quot;: sign(float(&quot;0.5&quot;)), &quot;v5&quot;: sign(double(&quot;-1000&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 1, &quot;v2&quot;: 1, &quot;v3&quot;: 0, &quot;v4&quot;: 1, &quot;v5&quot;: -1 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="sin"></a>sin</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">sin(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the sine value of the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the <tt>double</tt> sine value for the argument,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: sin(1), &quot;v2&quot;: sin(2), &quot;v3&quot;: sin(0), &quot;v4&quot;: sin(float(&quot;0.5&quot;)), &quot;v5&quot;: sin(double(&quot;1000&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 0.8414709848078965, &quot;v2&quot;: 0.9092974268256817, &quot;v3&quot;: 0.0, &quot;v4&quot;: 0.479425538604203, &quot;v5&quot;: 0.8268795405320025 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="sinh"></a>sinh</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">sinh(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the hyperbolic sine value of the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the <tt>double</tt> hyperbolic sine value for the argument,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: sinh(1), &quot;v2&quot;: sinh(2), &quot;v3&quot;: sinh(0), &quot;v4&quot;: sinh(float(&quot;0.5&quot;)), &quot;v5&quot;: sinh(double(&quot;8&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 1.1752011936438014, &quot;v2&quot;: 3.626860407847019, &quot;v3&quot;: 0.0, &quot;v4&quot;: 0.5210953054937474, &quot;v5&quot;: 1490.4788257895502 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="sqrt"></a>sqrt</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">sqrt(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the square root of the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the <tt>double</tt> square root value for the argument,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: sqrt(1), &quot;v2&quot;: sqrt(2), &quot;v3&quot;: sqrt(0), &quot;v4&quot;: sqrt(float(&quot;0.5&quot;)), &quot;v5&quot;: sqrt(double(&quot;1000&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 1.0, &quot;v2&quot;: 1.4142135623730951, &quot;v3&quot;: 0.0, &quot;v4&quot;: 0.7071067811865476, &quot;v5&quot;: 31.622776601683793 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="tan"></a>tan</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">tan(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the tangent value of the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the <tt>double</tt> tangent value for the argument,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: tan(1), &quot;v2&quot;: tan(2), &quot;v3&quot;: tan(0), &quot;v4&quot;: tan(float(&quot;0.5&quot;)), &quot;v5&quot;: tan(double(&quot;1000&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 1.5574077246549023, &quot;v2&quot;: -2.185039863261519, &quot;v3&quot;: 0.0, &quot;v4&quot;: 0.5463024898437905, &quot;v5&quot;: 1.4703241557027185 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="tanh"></a>tanh</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">tanh(numeric_value)
</pre></div></div>
</li>
<li>

<p>Computes the hyperbolic tangent value of the argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the <tt>double</tt> hyperbolic tangent value for the argument,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: tanh(1), &quot;v2&quot;: tanh(2), &quot;v3&quot;: tanh(0), &quot;v4&quot;: tanh(float(&quot;0.5&quot;)), &quot;v5&quot;: tanh(double(&quot;8&quot;)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 0.7615941559557649, &quot;v2&quot;: 0.964027580075817, &quot;v3&quot;: 0.0, &quot;v4&quot;: 0.4621171572600098, &quot;v5&quot;: 0.999999774929676 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="trunc"></a>trunc</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">trunc(numeric_value, number_digits)
</pre></div></div>
</li>
<li>

<p>Truncates the number to the given number of integer digits to the right of the decimal point (left if digits is negative). Digits is 0 if not given.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value,</li>
<li><tt>number_digits</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the <tt>double</tt> tangent value for the argument,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is <tt>missing</tt>,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-numeric value,</li>
<li>the second argument is any other non-tinyint, non-smallint, non-integer, and non-bigint value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: trunc(1, 1), &quot;v2&quot;: trunc(2, -2), &quot;v3&quot;: trunc(0.122, 2), &quot;v4&quot;: trunc(float(&quot;11.52&quot;), -1), &quot;v5&quot;: trunc(double(&quot;1000.5252&quot;), 3) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 1, &quot;v2&quot;: 2, &quot;v3&quot;: 0.12, &quot;v4&quot;: 10.0, &quot;v5&quot;: 1000.525 }
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div>
<div class="section">
<h3><a name="round_half_to_even"></a>round_half_to_even</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">round_half_to_even(numeric_value, [precision])
</pre></div></div>
</li>
<li>

<p>Computes the closest numeric value to <tt>numeric_value</tt> that is a multiple of ten to the power of minus <tt>precision</tt>. <tt>precision</tt> is optional and by default value <tt>0</tt> is used.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
<li><tt>precision</tt>: an optional <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt> field representing the number of digits in the fraction of the the result</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>The rounded value for the given number in the same type as the input argument,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-numeric value,</li>
<li>or, the second argument is any other non-tinyint, non-smallint, non-integer, or non-bigint value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: round_half_to_even(2013),
  &quot;v2&quot;: round_half_to_even(-4036),
  &quot;v3&quot;: round_half_to_even(0.8),
  &quot;v4&quot;: round_half_to_even(float(&quot;-2013.256&quot;)),
  &quot;v5&quot;: round_half_to_even(double(&quot;-2013.893823748327284&quot;)),
  &quot;v6&quot;: round_half_to_even(double(&quot;-2013.893823748327284&quot;), 2),
  &quot;v7&quot;: round_half_to_even(2013, 4),
  &quot;v8&quot;: round_half_to_even(float(&quot;-2013.256&quot;), 5)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 2013, &quot;v2&quot;: -4036, &quot;v3&quot;: 1.0, &quot;v4&quot;: -2013.0, &quot;v5&quot;: -2014.0, &quot;v6&quot;: -2013.89, &quot;v7&quot;: 2013, &quot;v8&quot;: -2013.256 }
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="String_Functions"></a><a name="StringFunctions" id="StringFunctions">String Functions</a></h2>
<div class="section">
<h3><a name="concat"></a>concat</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">concat(string1, string2, ...)
</pre></div></div>
</li>
<li>

<p>Returns a concatenated string from arguments.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string1</tt>: a string value,</li>
<li><tt>string2</tt>: a string value,</li>
<li>&#x2026;.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a concatenated string from arguments,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">concat(&quot;test &quot;, &quot;driven &quot;, &quot;development&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;test driven development&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="contains"></a>contains</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">contains(string, substring_to_contain)
</pre></div></div>
</li>
<li>

<p>Checks whether the string <tt>string</tt> contains the string <tt>substring_to_contain</tt></p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> that might contain the given substring,</li>
<li><tt>substring_to_contain</tt> : a target <tt>string</tt> that might be contained.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> value, <tt>true</tt> if <tt>string</tt> contains <tt>substring_to_contain</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will cause a type error,</li>
<li><tt>false</tt> otherwise.</li>
</ul>
</li>
<li>

<p>Note: an <a href="similarity.html#UsingIndexesToSupportSimilarityQueries">n_gram index</a> can be utilized for this function.</p>
</li>
<li>Example:

<div>
<div>
<pre class="source">{ &quot;v1&quot;: contains(&quot;I like x-phone&quot;, &quot;phone&quot;), &quot;v2&quot;: contains(&quot;one&quot;, &quot;phone&quot;) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: true, &quot;v2&quot;: false }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="ends_with"></a>ends_with</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">ends_with(string, substring_to_end_with)
</pre></div></div>
</li>
<li>

<p>Checks whether the string <tt>string</tt> ends with the string <tt>substring_to_end_with</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> that might end with the given string,</li>
<li><tt>substring_to_end_with</tt> : a <tt>string</tt> that might be contained as the ending substring.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> value, <tt>true</tt> if <tt>string</tt> contains <tt>substring_to_contain</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will cause a type error,</li>
<li><tt>false</tt> otherwise.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: ends_with(&quot; love product-b its shortcut_menu is awesome:)&quot;, &quot;:)&quot;),
  &quot;v2&quot;: ends_with(&quot; awsome:)&quot;, &quot;:-)&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: true, &quot;v2&quot;: false }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="initcap_.28or_title.29"></a>initcap (or title)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">initcap(string)
</pre></div></div>
</li>
<li>

<p>Converts a given string <tt>string</tt> so that the first letter of each word is uppercase and every other letter is lowercase. The function has an alias called &#x201c;title&#x201d;.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> to be converted.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>string</tt> as the title form of the given <tt>string</tt>,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: initcap(&quot;ASTERIXDB is here!&quot;), &quot;v2&quot;: title(&quot;ASTERIXDB is here!&quot;) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: &quot;Asterixdb Is Here!&quot;, &quot;v2&quot;: &quot;Asterixdb Is Here!&quot; }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="length"></a>length</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">length(string)
</pre></div></div>
</li>
<li>

<p>Returns the length of the string <tt>string</tt>. Note that the length is in the unit of code point. See the following examples for more details.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> or <tt>null</tt> that represents the string to be checked.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>bigint</tt> that represents the length of <tt>string</tt>,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">length(&quot;test string&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">11
</pre></div></div>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">length(&quot;&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is (the emoji character &#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466; has 7 code points):</p>

<div>
<div>
<pre class="source">7
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="lower"></a>lower</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">lower(string)
</pre></div></div>
</li>
<li>

<p>Converts a given string <tt>string</tt> to its lowercase form.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> to be converted.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>string</tt> as the lowercase form of the given <tt>string</tt>,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">lower(&quot;ASTERIXDB&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;asterixdb&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="ltrim"></a>ltrim</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">ltrim(string[, chars]);
</pre></div></div>
</li>
<li>

<p>Returns a new string with all leading characters that appear in <tt>chars</tt> removed. By default, white space is the character to trim. Note that here one character means one code point. For example, the emoji 4-people-family notation &#x201c;&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;&#x201d; contains 7 code points, and it is possible to trim a few code points (such as a 2-people-family &#x201c;&#x1f468;&#x200d;&#x1f466;&#x201d;) from it. See the following example for more details.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> to be trimmed,</li>
<li><tt>chars</tt> : a <tt>string</tt> that contains characters that are used to trim.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a trimmed, new <tt>string</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>Related functions: see <tt>trim()</tt>, <tt>rtrim()</tt></li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">ltrim(&quot;me like x-phone&quot;, &quot;eml&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot; like x-phone&quot;
</pre></div></div>
</li>
<li>

<p>Example with multi-codepoint notation (trim the man and boy from the family of man, woman, girl and boy):</p>

<div>
<div>
<pre class="source">ltrim(&quot;&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;&quot;, &quot;&#x1f468;&#x200d;&#x1f466;&quot;)
</pre></div></div>
</li>
<li>

<p>The expected result is (only woman, girl and boy are left in the family):</p>

<div>
<div>
<pre class="source">&quot;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="position"></a>position</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">position(string, string_pattern)
</pre></div></div>
</li>
<li>

<p>Returns the first position of <tt>string_pattern</tt> within <tt>string</tt>. The result is counted in the unit of code points. See the following example for more details.</p>
</li>
<li>

<p>The function returns the 0-based position. Another version of the function returns the 1-based position. Below are the aliases for each version:</p>
<ul>

<li>0-based: <tt>position</tt>, <tt>pos</tt>, <tt>position0</tt>, <tt>pos0</tt>.</li>
<li>1-based: <tt>position1</tt>, <tt>pos1</tt>.</li>
</ul>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>string</tt> : a <tt>string</tt> that might contain the pattern.</li>
<li><tt>string_pattern</tt> : a pattern <tt>string</tt> to be matched.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the first position that <tt>string_pattern</tt> appears within <tt>string</tt> (starting at 0), or -1 if it does not appear,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will return a <tt>null</tt>.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: position(&quot;ppphonepp&quot;, &quot;phone&quot;),
  &quot;v2&quot;: position(&quot;hone&quot;, &quot;phone&quot;),
  &quot;v3&quot;: position1(&quot;ppphonepp&quot;, &quot;phone&quot;),
  &quot;v4&quot;: position1(&quot;hone&quot;, &quot;phone&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 2, &quot;v2&quot;: -1, v3&quot;: 3, &quot;v4&quot;: -1 }
</pre></div></div>
</li>
<li>

<p>Example of multi-code-point character:</p>

<div>
<div>
<pre class="source">position(&quot;&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;&#x1f3c0;&quot;, &quot;&#x1f3c0;&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is (the emoji family character has 7 code points):</p>

<div>
<div>
<pre class="source">7
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="regexp_contains"></a>regexp_contains</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">regexp_contains(string, string_pattern[, string_flags])
</pre></div></div>
</li>
<li>

<p>Checks whether the strings <tt>string</tt> contains the regular expression pattern <tt>string_pattern</tt> (a Java regular expression pattern).</p>
</li>
<li>

<p>Aliases:</p>
<ul>

<li><tt>regexp_contains</tt>, <tt>regex_contains</tt>, <tt>contains_regexp</tt>, <tt>contains_regex</tt>.</li>
</ul>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>string</tt> : a <tt>string</tt> that might contain the pattern.</li>
<li><tt>string_pattern</tt> : a pattern <tt>string</tt> to be matched.</li>
<li><tt>string_flag</tt> : (Optional) a <tt>string</tt> with flags to be used during regular expression matching.
<ul>

<li>The following modes are enabled with these flags: dotall (s), multiline (m), case_insensitive (i), and comments and whitespace (x).</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt>, returns <tt>true</tt> if <tt>string</tt> contains the pattern <tt>string_pattern</tt>, <tt>false</tt> otherwise.</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value.</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value.</li>
<li>any other non-string input value will return a <tt>null</tt>.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: regexp_contains(&quot;pphonepp&quot;, &quot;p*hone&quot;),
  &quot;v2&quot;: regexp_contains(&quot;hone&quot;, &quot;p+hone&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: true, &quot;v2&quot;: false }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="regexp_like"></a>regexp_like</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">regexp_like(string, string_pattern[, string_flags])
</pre></div></div>
</li>
<li>

<p>Checks whether the string <tt>string</tt> exactly matches the regular expression pattern <tt>string_pattern</tt> (a Java regular expression pattern).</p>
</li>
<li>

<p>Aliases:</p>
<ul>

<li><tt>regexp_like</tt>, <tt>regex_like</tt>.</li>
</ul>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>string</tt> : a <tt>string</tt> that might contain the pattern.</li>
<li><tt>string_pattern</tt> : a pattern <tt>string</tt> that might be contained.</li>
<li><tt>string_flag</tt> : (Optional) a <tt>string</tt> with flags to be used during regular expression matching.
<ul>

<li>The following modes are enabled with these flags: dotall (s), multiline (m), case_insensitive (i), and comments and whitespace (x).</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> value, <tt>true</tt> if <tt>string</tt> contains the pattern <tt>string_pattern</tt>, <tt>false</tt> otherwise.</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value.</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value.</li>
<li>any other non-string input value will return a <tt>null</tt>.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: regexp_like(&quot; can't stand acast the network is horrible:(&quot;, &quot;.*acast.*&quot;),
  &quot;v2&quot;: regexp_like(&quot;acast&quot;, &quot;.*acst.*&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: true, &quot;v2&quot;: false }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="regexp_position"></a>regexp_position</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">regexp_position(string, string_pattern[, string_flags])
</pre></div></div>
</li>
<li>

<p>Returns first position of the regular expression <tt>string_pattern</tt> (a Java regular expression pattern) within <tt>string</tt>. The function returns the 0-based position. Another version of the function returns the 1-based position. Below are the aliases for each version:</p>
</li>
<li>

<p>Aliases:</p>
<ul>

<li>0-Based: <tt>regexp_position</tt>, <tt>regexp_pos</tt>, <tt>regexp_position0</tt>, <tt>regexp_pos0</tt>, <tt>regex_position</tt>, <tt>regex_pos</tt>, <tt>regex_position0</tt>, <tt>regex_pos0</tt>.</li>
<li>1-Based: <tt>regexp_position1</tt>, <tt>regexp_pos1</tt>, <tt>regex_position1</tt> <tt>regex_pos1</tt>.</li>
</ul>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>string</tt> : a <tt>string</tt> that might contain the pattern.</li>
<li><tt>string_pattern</tt> : a pattern <tt>string</tt> to be matched.</li>
<li><tt>string_flag</tt> : (Optional) a <tt>string</tt> with flags to be used during regular expression matching.
<ul>

<li>The following modes are enabled with these flags: dotall (s), multiline (m), case_insensitive (i), and comments and whitespace (x).</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the first position that the regular expression <tt>string_pattern</tt> appears in <tt>string</tt> (starting at 0), or -1 if it does not appear.</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will return a <tt>null</tt>.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: regexp_position(&quot;pphonepp&quot;, &quot;p*hone&quot;),
  &quot;v2&quot;: regexp_position(&quot;hone&quot;, &quot;p+hone&quot;),
  &quot;v3&quot;: regexp_position1(&quot;pphonepp&quot;, &quot;p*hone&quot;),
  &quot;v4&quot;: regexp_position1(&quot;hone&quot;, &quot;p+hone&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 0, &quot;v2&quot;: -1, &quot;v3&quot;: 1, &quot;v4&quot;: -1 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="regexp_replace"></a>regexp_replace</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">regexp_replace(string, string_pattern, string_replacement[, string_flags])
regexp_replace(string, string_pattern, string_replacement[, replacement_limit])
</pre></div></div>
</li>
<li>

<p>Checks whether the string <tt>string</tt> matches the given regular expression pattern <tt>string_pattern</tt> (a Java regular expression pattern), and replaces the matched pattern <tt>string_pattern</tt> with the new pattern <tt>string_replacement</tt>.</p>
</li>
<li>

<p>Aliases:</p>
<ul>

<li><tt>regexp_replace</tt>, <tt>regex_replace</tt>.</li>
</ul>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>string</tt> : a <tt>string</tt> that might contain the pattern.</li>
<li><tt>string_pattern</tt> : a pattern <tt>string</tt> to be matched.</li>
<li><tt>string_replacement</tt> : a pattern <tt>string</tt> to be used as the replacement.</li>
<li><tt>string_flag</tt> : (Optional) a <tt>string</tt> with flags to be used during replace.
<ul>

<li>The following modes are enabled with these flags: dotall (s), multiline (m), case_insensitive (i), and comments and whitespace (x).</li>
</ul>
</li>
<li><tt>replacement_limit</tt>: (Optional) an <tt>integer</tt> specifying the maximum number of replacements to make (if negative then all occurrences will be replaced)</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>Returns a <tt>string</tt> that is obtained after the replacements.</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value.</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value.</li>
<li>any other non-string input value will return a <tt>null</tt>.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">regexp_replace(&quot; like x-phone the voicemail_service is awesome&quot;, &quot; like x-phone&quot;, &quot;like product-a&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;like product-a the voicemail_service is awesome&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="repeat"></a>repeat</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">repeat(string, n)
</pre></div></div>
</li>
<li>

<p>Returns a string formed by repeating the input <tt>string</tt> <tt>n</tt> times.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> to be repeated,</li>
<li><tt>n</tt> : an <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt> value - how many times the string should be repeated.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a string that repeats the input <tt>string</tt> <tt>n</tt> times,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-string value,</li>
<li>or, the second argument is not a <tt>tinyint</tt>, <tt>smallint</tt>, <tt>integer</tt>, or <tt>bigint</tt>.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">repeat(&quot;test&quot;, 3);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;testtesttest&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="replace"></a>replace</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">replace(string, search_string, replacement_string[, limit])
</pre></div></div>
</li>
<li>

<p>Finds occurrences of the given substring <tt>search_string</tt> in the input string <tt>string</tt> and replaces them with the new substring <tt>replacement_string</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : an input <tt>string</tt>,</li>
<li><tt>search_string</tt> : a <tt>string</tt>  substring to be searched for,</li>
<li><tt>replacement_string</tt> : a <tt>string</tt> to be used as the replacement,</li>
<li><tt>limit</tt> : (Optional) an <tt>integer</tt> - maximum number of occurrences to be replaced. If not specified or negative then all occurrences will be replaced</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>Returns a <tt>string</tt> that is obtained after the replacements,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value or non-integer <tt>limit</tt> will cause a type error,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: replace(&quot; like x-phone the voicemail_service is awesome&quot;, &quot; like x-phone&quot;, &quot;like product-a&quot;),
  &quot;v2&quot;: replace(&quot;x-phone and x-phone&quot;, &quot;x-phone&quot;, &quot;product-a&quot;, 1)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: &quot;like product-a the voicemail_service is awesome&quot;,
  &quot;v2&quot;: &quot;product-a and x-phone&quot;
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="reverse"></a>reverse</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">reverse(string)
</pre></div></div>
</li>
<li>

<p>Returns a string formed by reversing characters in the input <tt>string</tt>. For characters of multiple code points, code point is the minimal unit to reverse. See the following examples for more details.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> to be reversed</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a string containing characters from the the input <tt>string</tt> in the reverse order,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-string value</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">reverse(&quot;hello&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;olleh&quot;
</pre></div></div>
</li>
<li>

<p>Example of multi-code-point character (Korean):</p>

<div>
<div>
<pre class="source">reverse(&quot;&#x1112;&#x1161;&#x11ab;&#x1100;&#x1173;&#x11af;&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is (the Korean characters are splitted into code points and then the code points are reversed):</p>

<div>
<div>
<pre class="source">&quot;&#x11af;&#x1173;&#x1100;&#x11ab;&#x1161;&#x1112;&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="rtrim"></a>rtrim</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">rtrim(string[, chars]);
</pre></div></div>
</li>
<li>

<p>Returns a new string with all trailing characters that appear in <tt>chars</tt> removed. By default, white space is the character to trim. Note that here one character means one code point. For example, the emoji 4-people-family notation &#x201c;&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;&#x201d; contains 7 code points, and it is possible to trim a few code points (such as a 2-people-family &#x201c;&#x1f468;&#x200d;&#x1f466;&#x201d;) from it. See the following example for more details.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> to be trimmed,</li>
<li><tt>chars</tt> : a <tt>string</tt> that contains characters that are used to trim.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a trimmed, new <tt>string</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>Related functions: see <tt>trim()</tt>, <tt>ltrim()</tt></li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: rtrim(&quot;i like x-phone&quot;, &quot;x-phone&quot;),
  &quot;v2&quot;: rtrim(&quot;i like x-phone&quot;, &quot;onexph&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: &quot;i like &quot;, &quot;v2&quot;: &quot;i like x-&quot; }
</pre></div></div>
</li>
<li>

<p>Example with multi-codepoint notation (trim the man and boy from the family of man, woman, girl and boy):</p>

<div>
<div>
<pre class="source">rtrim(&quot;&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;&quot;, &quot;&#x1f468;&#x200d;&#x1f466;&quot;)
</pre></div></div>
</li>
<li>

<p>The expected result is (only man, woman and girl are left in the family):</p>

<div>
<div>
<pre class="source">&quot;&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f467;&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="split"></a>split</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">split(string, sep)
</pre></div></div>
</li>
<li>

<p>Splits the input <tt>string</tt> into an array of substrings separated by the string <tt>sep</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> to be split.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an array of substrings by splitting the input <tt>string</tt> by <tt>sep</tt>,</li>
<li>in case of two consecutive <tt>sep</tt>s in the <tt>string</tt>, the result of splitting the two consecutive <tt>sep</tt>s will be the empty string <tt>&quot;&quot;</tt>,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">split(&quot;test driven development&quot;, &quot; &quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[ &quot;test&quot;, &quot;driven&quot;, &quot;development&quot; ]
</pre></div></div>
</li>
<li>

<p>Example with two consecutive <tt>sep</tt>s in the <tt>string</tt>:</p>

<div>
<div>
<pre class="source">split(&quot;123//456&quot;, &quot;/&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[ &quot;123&quot;, &quot;&quot;, &quot;456&quot; ]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="starts_with"></a>starts_with</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">starts_with(string, substring_to_start_with)
</pre></div></div>
</li>
<li>

<p>Checks whether the string <tt>string</tt> starts with the string <tt>substring_to_start_with</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> that might start with the given string.</li>
<li><tt>substring_to_start_with</tt> : a <tt>string</tt> that might be contained as the starting substring.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt>, returns <tt>true</tt> if <tt>string</tt> starts with the string <tt>substring_to_start_with</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will cause a type error,</li>
<li><tt>false</tt> otherwise.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot; : starts_with(&quot; like the plan, amazing&quot;, &quot; like&quot;),
  &quot;v2&quot; : starts_with(&quot;I like the plan, amazing&quot;, &quot; like&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: true, &quot;v2&quot;: false }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="substr"></a>substr</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">substr(string, offset[, length])
</pre></div></div>
</li>
<li>

<p>Returns the substring from the given string <tt>string</tt> based on the given start offset <tt>offset</tt> with the optional <tt>length</tt>. Note that both of the <tt>offset</tt> and <tt>length</tt> are in the unit of code point (e.g. the emoji family &#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466; has 7 code points). The function uses the 0-based position. Another version of the function uses the 1-based position. Below are the aliases for each version:</p>
</li>
<li>

<p>Aliases:</p>
<ul>

<li>0-Based: <tt>substring</tt>, <tt>substr</tt>, <tt>substring0</tt>, <tt>substr0</tt>.</li>
<li>1-Based: <tt>substring1</tt>, <tt>substr1</tt>.</li>
</ul>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>string</tt> : a <tt>string</tt> to be extracted.</li>
<li><tt>offset</tt> : an <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt> value as the starting offset of the substring in <tt>string</tt> (starting at 0). If negative then counted from the end of the string.</li>
<li><tt>length</tt> : (Optional) an an <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt> value as the length of the substring.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>string</tt> that represents the substring,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value, or if the substring could not be obtained because the starting offset is not within string bounds or <tt>length</tt> is negative.</li>
<li>a <tt>null</tt> will be returned if:
<ul>

<li>the first argument is any other non-string value.</li>
<li>the second argument is not a <tt>tinyint</tt>, <tt>smallint</tt>, <tt>integer</tt>, or <tt>bigint</tt>.</li>
<li>the third argument is not a <tt>tinyint</tt>, <tt>smallint</tt>, <tt>integer</tt>, or <tt>bigint</tt> if the argument is present.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: substr(&quot;test string&quot;, 6, 3), &quot;v2&quot;: substr1(&quot;test string&quot;, 6, 3) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: &quot;tri&quot;, &quot;v2&quot;: &quot;str&quot; }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>substring</tt>.</p></div>
<div class="section">
<h3><a name="trim"></a>trim</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">trim(string[, chars]);
</pre></div></div>
</li>
<li>

<p>Returns a new string with all leading and trailing characters that appear in <tt>chars</tt> removed. By default, white space is the character to trim. Note that here one character means one code point. For example, the emoji 4-people-family notation &#x201c;&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;&#x201d; contains 7 code points, and it is possible to trim a few code points (such as a 2-people-family &#x201c;&#x1f468;&#x200d;&#x1f466;&#x201d;) from it. See the following example for more details.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> to be trimmed,</li>
<li><tt>chars</tt> : a <tt>string</tt> that contains characters that are used to trim.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a trimmed, new <tt>string</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>Related functions: see <tt>ltrim()</tt>, <tt>rtrim()</tt></li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">trim(&quot;i like x-phone&quot;, &quot;xphoen&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot; like &quot;
</pre></div></div>
</li>
<li>

<p>Example with multi-codepoint notation (trim the man and boy from the family of man, woman, girl and boy):</p>
<p>trim(&#x201c;&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;&#x201d;, &#x201c;&#x1f468;&#x200d;&#x1f466;&#x201d;)</p>
</li>
<li>

<p>The expected result is (only woman and girl are left in the family):</p>

<div>
<div>
<pre class="source"> &quot;&#x1f469;&#x200d;&#x1f467;&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="upper"></a>upper</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">upper(string)
</pre></div></div>
</li>
<li>

<p>Converts a given string <tt>string</tt> to its uppercase form.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> to be converted.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>string</tt> as the uppercase form of the given <tt>string</tt>,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">upper(&quot;hello&quot;)
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;HELLO&quot;
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div>
<div class="section">
<h3><a name="string_concat"></a>string_concat</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">string_concat(array)
</pre></div></div>
</li>
<li>

<p>Concatenates an array of strings <tt>array</tt> into a single string.</p>
</li>
<li>Arguments:
<ul>

<li><tt>array</tt> : an <tt>array</tt> or <tt>multiset</tt> of <tt>string</tt>s (could be <tt>null</tt> or <tt>missing</tt>) to be concatenated.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the concatenated <tt>string</tt> value,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li><tt>missing</tt> if any element in the input array is <tt>missing</tt>,</li>
<li><tt>null</tt> if any element in the input array is <tt>null</tt> but no element in the input array is <tt>missing</tt>,</li>
<li>any other non-array input value or non-integer element in the input array will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">string_concat([&quot;ASTERIX&quot;, &quot; &quot;, &quot;ROCKS!&quot;]);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;ASTERIX ROCKS!&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="string_join"></a>string_join</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">string_join(array, string)
</pre></div></div>
</li>
<li>

<p>Joins an array or multiset of strings <tt>array</tt> with the given separator <tt>string</tt> into a single string.</p>
</li>
<li>Arguments:
<ul>

<li><tt>array</tt> : an <tt>array</tt> or <tt>multiset</tt> of strings (could be <tt>null</tt>) to be joined.</li>
<li><tt>string</tt> : a <tt>string</tt> to serve as the separator.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the joined <tt>string</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li><tt>missing</tt> if the first argument array contains a <tt>missing</tt>,</li>
<li><tt>null</tt> if the first argument array contains a <tt>null</tt> but does not contain a <tt>missing</tt>,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-array value, or contains any other non-string value,</li>
<li>or, the second argument is any other non-string value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">string_join([&quot;ASTERIX&quot;, &quot;ROCKS~&quot;], &quot;!! &quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;ASTERIX!! ROCKS~&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="string_to_codepoint"></a>string_to_codepoint</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">string_to_codepoint(string)
</pre></div></div>
</li>
<li>

<p>Converts the string <tt>string</tt> to its code_based representation.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> that will be converted.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>array</tt> of the code points for the string <tt>string</tt>,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">string_to_codepoint(&quot;Hello ASTERIX!&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[ 72, 101, 108, 108, 111, 32, 65, 83, 84, 69, 82, 73, 88, 33 ]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="codepoint_to_string"></a>codepoint_to_string</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">codepoint_to_string(array)
</pre></div></div>
</li>
<li>

<p>Converts the ordered code_based representation <tt>array</tt> to the corresponding string.</p>
</li>
<li>Arguments:
<ul>

<li><tt>array</tt> : an <tt>array</tt> of integer code_points.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>string</tt> representation of <tt>array</tt>.</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li><tt>missing</tt> if any element in the input array is <tt>missing</tt>,</li>
<li><tt>null</tt> if any element in the input array is <tt>null</tt> but no element in the input array is <tt>missing</tt>,</li>
<li>any other non-array input value or non-integer element in the input array will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">codepoint_to_string([72, 101, 108, 108, 111, 32, 65, 83, 84, 69, 82, 73, 88, 33]);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;Hello ASTERIX!&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="substring_before"></a>substring_before</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">substring_before(string, string_pattern)
</pre></div></div>
</li>
<li>

<p>Returns the substring from the given string <tt>string</tt> before the given pattern <tt>string_pattern</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> to be extracted.</li>
<li><tt>string_pattern</tt> : a <tt>string</tt> pattern to be searched.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>string</tt> that represents the substring,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">substring_before(&quot; like x-phone&quot;, &quot;x-phone&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot; like &quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="substring_after"></a>substring_after</h3>
<ul>

<li>

<p>Syntax:</p>
<p>substring_after(string, string_pattern);</p>
</li>
<li>

<p>Returns the substring from the given string <tt>string</tt> after the given pattern <tt>string_pattern</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> to be extracted.</li>
<li><tt>string_pattern</tt> : a <tt>string</tt> pattern to be searched.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>string</tt> that represents the substring,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">substring_after(&quot; like x-phone&quot;, &quot;xph&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;one&quot;
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Binary_Functions"></a><a name="BinaryFunctions" id="BinaryFunctions">Binary Functions</a></h2>
<div class="section">
<h3><a name="parse_binary"></a>parse_binary</h3>
<ul>

<li>

<p>Syntax:</p>
<p>parse_binary(string, encoding)</p>
</li>
<li>

<p>Creates a <tt>binary</tt> from an string encoded in <tt>encoding</tt> format.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : an encoded <tt>string</tt>,</li>
<li><tt>encoding</tt> : a string notation specifies the encoding type of the given <tt>string</tt>. Currently we support <tt>hex</tt> and <tt>base64</tt> format.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>binary</tt> that is decoded from the given <tt>string</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>[ parse_binary(&#x201c;ABCDEF0123456789&#x201d;,&#x201c;hex&#x201d;), parse_binary(&#x201c;abcdef0123456789&#x201d;,&#x201c;HEX&#x201d;), parse_binary(&#x2018;QXN0ZXJpeAE=&#x2019;,&#x201c;base64&#x201d;) ];</p>
</li>
<li>

<p>The expected result is:</p>
<p>[ hex(&#x201c;ABCDEF0123456789&#x201d;), hex(&#x201c;ABCDEF0123456789&#x201d;), hex(&#x201c;4173746572697801&#x201d;) ]</p>
</li>
</ul></div>
<div class="section">
<h3><a name="print_binary"></a>print_binary</h3>
<ul>

<li>

<p>Syntax:</p>
<p>print_binary(binary, encoding)</p>
</li>
<li>

<p>Prints a <tt>binary</tt> to the required encoding <tt>string</tt> format.</p>
</li>
<li>Arguments:
<ul>

<li><tt>binary</tt> : a <tt>binary</tt> data need to be printed.</li>
<li><tt>encoding</tt> : a string notation specifies the expected encoding type. Currently we support <tt>hex</tt> and <tt>base64</tt> format.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>string</tt> that represents the encoded format of a <tt>binary</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">[ print_binary(hex(&quot;ABCDEF0123456789&quot;), &quot;base64&quot;), print_binary(base64(&quot;q83vASNFZ4k=&quot;), &quot;hex&quot;) ]
</pre></div></div>
</li>
<li>

<p>The expected result are:</p>

<div>
<div>
<pre class="source">[ &quot;q83vASNFZ4k=&quot;, &quot;ABCDEF0123456789&quot; ]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="binary_length"></a>binary_length</h3>
<ul>

<li>

<p>Syntax:</p>
<p>binary_length(binary)</p>
</li>
<li>

<p>Returns the number of bytes storing the binary data.</p>
</li>
<li>Arguments:
<ul>

<li><tt>binary</tt> : a <tt>binary</tt> value to be checked.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>bigint</tt> that represents the number of bytes,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-binary input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">binary_length(hex(&quot;00AA&quot;))
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>
<p>2</p>
</li>
</ul></div>
<div class="section">
<h3><a name="sub_binary"></a>sub_binary</h3>
<ul>

<li>

<p>Syntax:</p>
<p>sub_binary(binary, offset[, length])</p>
</li>
<li>

<p>Returns the sub binary from the given <tt>binary</tt> based on the given start offset with the optional <tt>length</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>binary</tt> : a <tt>binary</tt> to be extracted,</li>
<li><tt>offset</tt> : a <tt>tinyint</tt>, <tt>smallint</tt>, <tt>integer</tt>, or <tt>bigint</tt> value as the starting offset of the sub binary in <tt>binary</tt> (starting at 0),</li>
<li><tt>length</tt> : (Optional) a <tt>tinyint</tt>, <tt>smallint</tt>, <tt>integer</tt>, or <tt>bigint</tt> value as the length of the sub binary.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>binary</tt> that represents the sub binary,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-binary value,</li>
<li>or, the second argument is any other non-integer value,</li>
<li>or, the third argument is any other non-integer value, if it is present.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">sub_binary(hex(&quot;AABBCCDD&quot;), 4);
</pre></div></div>
</li>
<li>

<p>The expected result is</p>

<div>
<div>
<pre class="source">hex(&quot;DD&quot;)
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="binary_concat"></a>binary_concat</h3>
<ul>

<li>

<p>Syntax:</p>
<p>binary_concat(array)</p>
</li>
<li>

<p>Concatenates a binary <tt>array</tt> or <tt>multiset</tt> into a single binary.</p>
</li>
<li>Arguments:
<ul>

<li><tt>array</tt> : an <tt>array</tt> or <tt>multiset</tt> of binaries (could be <tt>null</tt> or <tt>missing</tt>) to be concatenated.</li>
</ul>
</li>
<li>Return Value  :
<ul>

<li>the concatenated <tt>binary</tt> value,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li><tt>missing</tt> if any element in the input array is <tt>missing</tt>,</li>
<li><tt>null</tt> if any element in the input array is <tt>null</tt> but no element in the input array is <tt>missing</tt>,</li>
<li>any other non-array input value or non-binary element in the input array will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>binary_concat([hex(&#x201c;42&#x201d;), hex(&quot;&quot;), hex(&#x2018;42&#x2019;)]);</p>
</li>
<li>

<p>The expected result is</p>
<p>hex(&#x201c;4242&#x201d;)</p>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Spatial_Functions"></a><a name="SpatialFunctions" id="SpatialFunctions">Spatial Functions</a></h2>
<div class="section">
<h3><a name="create_point"></a>create_point</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">create_point(x, y)
</pre></div></div>
</li>
<li>

<p>Creates the primitive type <tt>point</tt> using an <tt>x</tt> and <tt>y</tt> value.</p>
</li>
<li>Arguments:</li>
<li><tt>x</tt> : a <tt>double</tt> that represents the x-coordinate,</li>
<li><tt>y</tt> : a <tt>double</tt> that represents the y-coordinate.</li>
<li>Return Value:</li>
<li>a <tt>point</tt> representing the ordered pair (<tt>x</tt>, <tt>y</tt>),</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-double input value will cause a type error.</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;point&quot;: create_point(30.0,70.0) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;point&quot;: point(&quot;30.0,70.0&quot;) }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="create_line"></a>create_line</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">create_line(point1, point2)
</pre></div></div>
</li>
<li>

<p>Creates the primitive type <tt>line</tt> using <tt>point1</tt> and <tt>point2</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>point1</tt> : a <tt>point</tt> that represents the start point of the line.</li>
<li><tt>point2</tt> : a <tt>point</tt> that represents the end point of the line.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a spatial <tt>line</tt> created using the points provided in <tt>point1</tt> and <tt>point2</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-point input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;line&quot;: create_line(create_point(30.0,70.0), create_point(50.0,90.0)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;line&quot;: line(&quot;30.0,70.0 50.0,90.0&quot;) }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="create_rectangle"></a>create_rectangle</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">create_rectangle(point1, point2)
</pre></div></div>
</li>
<li>

<p>Creates the primitive type <tt>rectangle</tt> using <tt>point1</tt> and <tt>point2</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>point1</tt> : a <tt>point</tt> that represents the lower_left point of the rectangle.</li>
<li><tt>point2</tt> : a <tt>point</tt> that represents the upper_right point of the rectangle.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a spatial <tt>rectangle</tt> created using the points provided in <tt>point1</tt> and <tt>point2</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-point input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;rectangle&quot;: create_rectangle(create_point(30.0,70.0), create_point(50.0,90.0)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;rectangle&quot;: rectangle(&quot;30.0,70.0 50.0,90.0&quot;) }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="create_circle"></a>create_circle</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">create_circle(point, radius)
</pre></div></div>
</li>
<li>

<p>Creates the primitive type <tt>circle</tt> using <tt>point</tt> and <tt>radius</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>point</tt> : a <tt>point</tt> that represents the center of the circle.</li>
<li><tt>radius</tt> : a <tt>double</tt> that represents the radius of the circle.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a spatial <tt>circle</tt> created using the center point and the radius provided in <tt>point</tt> and <tt>radius</tt>.</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-point value,</li>
<li>or, the second argument is any other non-double value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;circle&quot;: create_circle(create_point(30.0,70.0), 5.0) }
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;circle&quot;: circle(&quot;30.0,70.0 5.0&quot;) }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="create_polygon"></a>create_polygon</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">create_polygon(array)
</pre></div></div>
</li>
<li>

<p>Creates the primitive type <tt>polygon</tt> using the double values provided in the argument <tt>array</tt>. Each two consecutive double values represent a point starting from the first double value in the array. Note that at least six double values should be specified, meaning a total of three points.</p>
</li>
<li>Arguments:
<ul>

<li><tt>array</tt> : an array of doubles representing the points of the polygon.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>polygon</tt>, represents a spatial simple polygon created using the points provided in <tt>array</tt>.</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li><tt>missing</tt> if any element in the input array is <tt>missing</tt>,</li>
<li><tt>null</tt> if any element in the input array is <tt>null</tt> but no element in the input array is <tt>missing</tt>,</li>
<li>any other non-array input value or non-double element in the input array will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;polygon&quot;: create_polygon([1.0,1.0,2.0,2.0,3.0,3.0,4.0,4.0]) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;polygon&quot;: polygon(&quot;1.0,1.0 2.0,2.0 3.0,3.0 4.0,4.0&quot;) }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="get_x.2Fget_y"></a>get_x/get_y</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_x(point) or get_y(point)
</pre></div></div>
</li>
<li>

<p>Returns the x or y coordinates of a point <tt>point</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>point</tt> : a <tt>point</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> representing the x or y coordinates of the point <tt>point</tt>,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-point input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;x_coordinate&quot;: get_x(create_point(2.3,5.0)), &quot;y_coordinate&quot;: get_y(create_point(2.3,5.0)) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;x_coordinate&quot;: 2.3, &quot;y_coordinate&quot;: 5.0 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="get_points"></a>get_points</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_points(spatial_object)
</pre></div></div>
</li>
<li>

<p>Returns an ordered array of the points forming the spatial object <tt>spatial_object</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>spatial_object</tt> : a <tt>point</tt>, <tt>line</tt>, <tt>rectangle</tt>, <tt>circle</tt>, or <tt>polygon</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>array</tt> of the points forming the spatial object <tt>spatial_object</tt>,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-spatial-object input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">get_points(create_polygon([1.0,1.0,2.0,2.0,3.0,3.0,4.0,4.0]))
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[ point(&quot;1.0,1.0&quot;), point(&quot;2.0,2.0&quot;), point(&quot;3.0,3.0&quot;), point(&quot;4.0,4.0&quot;) ]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="get_center.2Fget_radius"></a>get_center/get_radius</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_center(circle_expression) or get_radius(circle_expression)
</pre></div></div>
</li>
<li>

<p>Returns the center and the radius of a circle <tt>circle_expression</tt>, respectively.</p>
</li>
<li>Arguments:
<ul>

<li><tt>circle_expression</tt> : a <tt>circle</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>point</tt> or <tt>double</tt>, represent the center or radius of the circle <tt>circle_expression</tt>.</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-circle input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;circle_radius&quot;: get_radius(create_circle(create_point(6.0,3.0), 1.0)),
  &quot;circle_center&quot;: get_center(create_circle(create_point(6.0,3.0), 1.0))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;circle_radius&quot;: 1.0, &quot;circle_center&quot;: point(&quot;6.0,3.0&quot;) }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="spatial_distance"></a>spatial_distance</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">spatial_distance(point1, point2)
</pre></div></div>
</li>
<li>

<p>Returns the Euclidean distance between <tt>point1</tt> and <tt>point2</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>point1</tt> : a <tt>point</tt>.</li>
<li><tt>point2</tt> : a <tt>point</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> as the Euclidean distance between <tt>point1</tt> and <tt>point2</tt>.</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-point input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">spatial_distance(point(&quot;47.44,80.65&quot;), create_point(30.0,70.0));
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">20.434678857275934
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="spatial_area"></a>spatial_area</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">spatial_area(spatial_2d_expression)
</pre></div></div>
</li>
<li>

<p>Returns the spatial area of <tt>spatial_2d_expression</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>spatial_2d_expression</tt> : a <tt>rectangle</tt>, <tt>circle</tt>, or <tt>polygon</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> representing the area of <tt>spatial_2d_expression</tt>.</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-2d-spatial-object will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">spatial_area(create_circle(create_point(0.0,0.0), 5.0));
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">78.53981625
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="spatial_intersect"></a>spatial_intersect</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">spatial_intersect(spatial_object1, spatial_object2)
</pre></div></div>
</li>
<li>

<p>Checks whether <tt>@arg1</tt> and <tt>@arg2</tt> spatially intersect each other.</p>
</li>
<li>Arguments:
<ul>

<li><tt>spatial_object1</tt> : a <tt>point</tt>, <tt>line</tt>, <tt>rectangle</tt>, <tt>circle</tt>, or <tt>polygon</tt>.</li>
<li><tt>spatial_object2</tt> : a <tt>point</tt>, <tt>line</tt>, <tt>rectangle</tt>, <tt>circle</tt>, or <tt>polygon</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> representing whether <tt>spatial_object1</tt> and <tt>spatial_object2</tt> spatially overlap with each other,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-spatial-object input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">spatial_intersect(point(&quot;39.28,70.48&quot;), create_rectangle(create_point(30.0,70.0), create_point(40.0,80.0)));
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">true
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="spatial_cell"></a>spatial_cell</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">spatial_cell(point1, point2, x_increment, y_increment)
</pre></div></div>
</li>
<li>

<p>Returns the grid cell that <tt>point1</tt> belongs to.</p>
</li>
<li>Arguments:
<ul>

<li><tt>point1</tt> : a <tt>point</tt> representing the point of interest that its grid cell will be returned.</li>
<li><tt>point2</tt> : a <tt>point</tt> representing the origin of the grid.</li>
<li><tt>x_increment</tt> : a <tt>double</tt>, represents X increments.</li>
<li><tt>y_increment</tt> : a <tt>double</tt>, represents Y increments.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>rectangle</tt> representing the grid cell that <tt>point1</tt> belongs to,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first or second argument is any other non-point value,</li>
<li>or, the second or third argument is any other non-double value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">spatial_cell(point(&quot;39.28,70.48&quot;), create_point(20.0,50.0), 5.5, 6.0);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">rectangle(&quot;36.5,68.0 42.0,74.0&quot;);
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Similarity_Functions"></a><a name="SimilarityFunctions" id="SimilarityFunctions">Similarity Functions</a></h2>
<p>AsterixDB supports queries with different similarity functions, including <a class="externalLink" href="http://en.wikipedia.org/wiki/Levenshtein_distance">edit distance</a> and <a class="externalLink" href="https://en.wikipedia.org/wiki/Jaccard_index">Jaccard</a>.</p>
<div class="section">
<h3><a name="edit_distance"></a>edit_distance</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">edit_distance(expression1, expression2)
</pre></div></div>
</li>
<li>

<p>Returns the edit distance of <tt>expression1</tt> and <tt>expression2</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expression1</tt> : a <tt>string</tt> or a homogeneous <tt>array</tt> of a comparable item type.</li>
<li><tt>expression2</tt> : The same type as <tt>expression1</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>bigint</tt> that represents the edit distance between <tt>expression1</tt> and <tt>expression2</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>Note: an <a href="similarity.html#UsingIndexesToSupportSimilarityQueries">n_gram index</a> can be utilized for this function.</li>
<li>Example:

<div>
<div>
<pre class="source">edit_distance(&quot;SuzannaTillson&quot;, &quot;Suzanna Tilson&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">2
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="edit_distance_check"></a>edit_distance_check</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">edit_distance_check(expression1, expression2, threshold)
</pre></div></div>
</li>
<li>

<p>Checks whether the edit distance of <tt>expression1</tt> and <tt>expression2</tt> is within a given threshold.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>expression1</tt> : a <tt>string</tt> or a homogeneous <tt>array</tt> of a comparable item type.</li>
<li><tt>expression2</tt> : The same type as <tt>expression1</tt>.</li>
<li><tt>threshold</tt> : a <tt>bigint</tt> that represents the distance threshold.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>array</tt> with two items:
<ul>

<li>The first item contains a <tt>boolean</tt> value representing whether the edit distance of <tt>expression1</tt> and <tt>expression2</tt> is within the given threshold.</li>
<li>The second item contains an <tt>integer</tt> that represents the edit distance of <tt>expression1</tt> and <tt>expression2</tt> if the first item is true.</li>
<li>If the first item is false, then the second item is set to 2147483647.</li>
</ul>
</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first or second argument is any other non-string value,</li>
<li>or, the third argument is any other non-bigint value.</li>
</ul>
</li>
</ul>
</li>
<li>Note: an <a href="similarity.html#UsingIndexesToSupportSimilarityQueries">n_gram index</a> can be utilized for this function.</li>
<li>Example:

<div>
<div>
<pre class="source">edit_distance_check(&quot;happy&quot;,&quot;hapr&quot;,2);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[ true, 2 ]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="edit_distance_contains"></a>edit_distance_contains</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">edit_distance_contains(expression1, expression2, threshold)
</pre></div></div>
</li>
<li>

<p>Checks whether <tt>expression1</tt> contains <tt>expression2</tt> with an <a class="externalLink" href="http://en.wikipedia.org/wiki/Levenshtein_distance">edit distance</a> within a given threshold.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>expression1</tt> : a <tt>string</tt> or a homogeneous <tt>array</tt> of a comparable item type.</li>
<li><tt>expression2</tt> : The same type as <tt>expression1</tt>.</li>
<li><tt>threshold</tt> : a <tt>bigint</tt> that represents the distance threshold.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>array</tt> with two items:
<ul>

<li>The first item contains a <tt>boolean</tt> value representing whether <tt>expression1</tt> can contain <tt>expression2</tt>.</li>
<li>The second item contains an <tt>integer</tt> that represents the required edit distance for <tt>expression1</tt> to contain <tt>expression2</tt> if the first item is true.</li>
</ul>
</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first or second argument is any other non-string value,</li>
<li>or, the third argument is any other non-bigint value.</li>
</ul>
</li>
</ul>
</li>
<li>Note: an <a href="similarity.html#UsingIndexesToSupportSimilarityQueries">n_gram index</a> can be utilized for this function.</li>
<li>Example:

<div>
<div>
<pre class="source">edit_distance_contains(&quot;happy&quot;,&quot;hapr&quot;,2);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[ true, 1 ]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="similarity_jaccard"></a>similarity_jaccard</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">similarity_jaccard(array1, array2)
</pre></div></div>
</li>
<li>

<p>Returns the <a class="externalLink" href="http://en.wikipedia.org/wiki/Jaccard_index">Jaccard similarity</a> of <tt>array1</tt> and <tt>array2</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>array1</tt> : an <tt>array</tt> or <tt>multiset</tt>.</li>
<li><tt>array2</tt> : an <tt>array</tt> or <tt>multiset</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>float</tt> that represents the Jaccard similarity of <tt>array1</tt> and <tt>array2</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li><tt>missing</tt> if any element in any input array is <tt>missing</tt>,</li>
<li><tt>null</tt> if any element in any input array is <tt>null</tt> but no element in the input array is <tt>missing</tt>,</li>
<li>any other non-array input value or non-integer element in any input array will cause a type error.</li>
</ul>
</li>
<li>

<p>Note: a <a href="similarity.html#UsingIndexesToSupportSimilarityQueries">keyword index</a> can be utilized for this function.</p>
</li>
<li>Example:

<div>
<div>
<pre class="source">similarity_jaccard([1,5,8,9], [1,5,9,10]);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">0.6
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="similarity_jaccard_check"></a>similarity_jaccard_check</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">similarity_jaccard_check(array1, array2, threshold)
</pre></div></div>
</li>
<li>

<p>Checks whether <tt>array1</tt> and <tt>array2</tt> have a <a class="externalLink" href="http://en.wikipedia.org/wiki/Jaccard_index">Jaccard similarity</a> greater than or equal to threshold.  Again, the &#x201c;check&#x201d; version of Jaccard is faster than the &#x201c;non_check&#x201d; version.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>array1</tt> : an <tt>array</tt> or <tt>multiset</tt>.</li>
<li><tt>array2</tt> : an <tt>array</tt> or <tt>multiset</tt>.</li>
<li><tt>threshold</tt> : a <tt>double</tt> that represents the similarity threshold.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>array</tt> with two items:
<ul>

<li>The first item contains a <tt>boolean</tt> value representing whether <tt>array1</tt> and <tt>array2</tt> are similar.</li>
<li>The second item contains a <tt>float</tt> that represents the Jaccard similarity of <tt>array1</tt> and <tt>array2</tt> if it is greater than or equal to the threshold, or 0 otherwise.</li>
</ul>
</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li><tt>missing</tt> if any element in any input array is <tt>missing</tt>,</li>
<li><tt>null</tt> if any element in any input array is <tt>null</tt> but no element in the input array is <tt>missing</tt>,</li>
<li>a type error will be raised if:
<ul>

<li>the first or second argument is any other non-array value,
<ul>

<li>or, the third argument is any other non-double value.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Note: a <a href="similarity.html#UsingIndexesToSupportSimilarityQueries">keyword index</a> can be utilized for this function.</p>
</li>
<li>Example:

<div>
<div>
<pre class="source">similarity_jaccard_check([1,5,8,9], [1,5,9,10], 0.6);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[ false, 0.0 ]
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Tokenizing_Functions"></a><a name="TokenizingFunctions" id="TokenizingFunctions">Tokenizing Functions</a></h2>
<div class="section">
<h3><a name="word_tokens"></a>word_tokens</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">word_tokens(string)
</pre></div></div>
</li>
<li>

<p>Returns an array of word tokens of <tt>string</tt> using non_alphanumeric characters as delimiters.</p>
</li>
<li>Arguments:
<ul>

<li><tt>string</tt> : a <tt>string</tt> that will be tokenized.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>array</tt> of <tt>string</tt> word tokens,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-string input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">word_tokens(&quot;I like the phone, awesome!&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[ &quot;i&quot;, &quot;like&quot;, &quot;the&quot;, &quot;phone&quot;, &quot;awesome&quot; ]
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Temporal_Functions"></a><a name="TemporalFunctions" id="TemporalFunctions">Temporal Functions</a></h2>
<div class="section">
<h3><a name="get_year.2Fget_month.2Fget_day.2Fget_hour.2Fget_minute.2Fget_second.2Fget_millisecond"></a>get_year/get_month/get_day/get_hour/get_minute/get_second/get_millisecond</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_year/get_month/get_day/get_hour/get_minute/get_second/get_millisecond(temporal_value)
</pre></div></div>
</li>
<li>

<p>Accessors for accessing fields in a temporal value</p>
</li>
<li>Arguments:
<ul>

<li><tt>temporal_value</tt> : a temporal value represented as one of the following types: <tt>date</tt>, <tt>datetime</tt>, <tt>time</tt>, and <tt>duration</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>bigint</tt> value representing the field to be extracted,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-interval input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;year&quot;: get_year(date(&quot;2010-10-30&quot;)),
  &quot;month&quot;: get_month(datetime(&quot;1987-11-19T23:49:23.938&quot;)),
  &quot;day&quot;: get_day(date(&quot;2010-10-30&quot;)),
  &quot;hour&quot;: get_hour(time(&quot;12:23:34.930+07:00&quot;)),
  &quot;min&quot;: get_minute(duration(&quot;P3Y73M632DT49H743M3948.94S&quot;)),
  &quot;second&quot;: get_second(datetime(&quot;1987-11-19T23:49:23.938&quot;)),
  &quot;ms&quot;: get_millisecond(duration(&quot;P3Y73M632DT49H743M3948.94S&quot;))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;year&quot;: 2010, &quot;month&quot;: 11, &quot;day&quot;: 30, &quot;hour&quot;: 5, &quot;min&quot;: 28, &quot;second&quot;: 23, &quot;ms&quot;: 94 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="adjust_datetime_for_timezone"></a>adjust_datetime_for_timezone</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">adjust_datetime_for_timezone(datetime, string)
</pre></div></div>
</li>
<li>

<p>Adjusts the given datetime <tt>datetime</tt> by applying the timezone information <tt>string</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>datetime</tt> : a <tt>datetime</tt> value to be adjusted.</li>
<li><tt>string</tt> : a <tt>string</tt> representing the timezone information.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>string</tt> value representing the new datetime after being adjusted by the timezone information,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-datetime value,</li>
<li>or, the second argument is any other non-string value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">adjust_datetime_for_timezone(datetime(&quot;2008-04-26T10:10:00&quot;), &quot;+08:00&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;2008-04-26T18:10:00.000+08:00&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="adjust_time_for_timezone"></a>adjust_time_for_timezone</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">adjust_time_for_timezone(time, string)
</pre></div></div>
</li>
<li>

<p>Adjusts the given time <tt>time</tt> by applying the timezone information <tt>string</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>time</tt> : a <tt>time</tt> value to be adjusted.</li>
<li><tt>string</tt> : a <tt>string</tt> representing the timezone information.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>string</tt> value representing the new time after being adjusted by the timezone information,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-time value,</li>
<li>or, the second argument is any other non-string value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">adjust_time_for_timezone(get_time_from_datetime(datetime(&quot;2008-04-26T10:10:00&quot;)), &quot;+08:00&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;18:10:00.000+08:00&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="calendar_duration_from_datetime"></a>calendar_duration_from_datetime</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">calendar_duration_from_datetime(datetime, duration_value)
</pre></div></div>
</li>
<li>

<p>Gets a user_friendly representation of the duration <tt>duration_value</tt> based on the given datetime <tt>datetime</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>datetime</tt> : a <tt>datetime</tt> value to be used as the reference time point.</li>
<li><tt>duration_value</tt> : a <tt>duration</tt> value to be converted.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>duration</tt> value with the duration as <tt>duration_value</tt> but with a user_friendly representation,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-datetime value,</li>
<li>or, the second argument is any other non-duration input value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">calendar_duration_from_datetime(
      datetime(&quot;2016-03-26T10:10:00&quot;),
      datetime(&quot;2016-03-26T10:10:00&quot;) - datetime(&quot;2011-01-01T00:00:00&quot;)
);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">duration(&quot;P5Y2M24DT10H10M&quot;)
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="get_year_month_duration.2Fget_day_time_duration"></a>get_year_month_duration/get_day_time_duration</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_year_month_duration/get_day_time_duration(duration_value)
</pre></div></div>
</li>
<li>

<p>Extracts the correct <tt>duration</tt> subtype from <tt>duration_value</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>duration_value</tt> : a <tt>duration</tt> value to be converted.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>year_month_duration</tt> value or a <tt>day_time_duration</tt> value,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-duration input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">get_year_month_duration(duration(&quot;P12M50DT10H&quot;));
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">year_month_duration(&quot;P1Y&quot;)
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="months_from_year_month_duration.2Fms_from_day_time_duration"></a>months_from_year_month_duration/ms_from_day_time_duration</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">months_from_year_month_duration/ms_from_day_time_duration(duration_value)
</pre></div></div>
</li>
<li>

<p>Extracts the number of months or the number of milliseconds from the <tt>duration</tt> subtype.</p>
</li>
<li>Arguments:
<ul>

<li><tt>duration_value</tt> : a <tt>duration</tt> of the correct subtype.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>bigint</tt> representing the number of months/milliseconds,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-duration input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
    &quot;months&quot;: months_from_year_month_duration(get_year_month_duration(duration(&quot;P5Y7MT50M&quot;))),
    &quot;milliseconds&quot;: ms_from_day_time_duration(get_day_time_duration(duration(&quot;P5Y7MT50M&quot;)))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{&quot;months&quot;: 67, &quot;milliseconds&quot;: 3000000}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="duration_from_months.2Fduration_from_ms"></a>duration_from_months/duration_from_ms</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">duration_from_months/duration_from_ms(number_value)
</pre></div></div>
</li>
<li>

<p>Creates a <tt>duration</tt> from <tt>number_value</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>number_value</tt> : a <tt>bigint</tt> representing the number of months/milliseconds</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>duration</tt> containing <tt>number_value</tt> value for months/milliseconds,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-duration input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">duration_from_months(8);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">duration(&quot;P8M&quot;)
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="duration_from_interval"></a>duration_from_interval</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">duration_from_interval(interval_value)
</pre></div></div>
</li>
<li>

<p>Creates a <tt>duration</tt> from <tt>interval_value</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>interval_value</tt> : an <tt>interval</tt> value</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>duration</tt> representing the time in the <tt>interval_value</tt></li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-duration input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;dr1&quot; : duration_from_interval(interval(date(&quot;2010-10-30&quot;), date(&quot;2010-12-21&quot;))),
  &quot;dr2&quot; : duration_from_interval(interval(datetime(&quot;2012-06-26T01:01:01.111&quot;), datetime(&quot;2012-07-27T02:02:02.222&quot;))),
  &quot;dr3&quot; : duration_from_interval(interval(time(&quot;12:32:38&quot;), time(&quot;20:29:20&quot;))),
  &quot;dr4&quot; : duration_from_interval(null)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  &quot;dr1&quot;: day_time_duration(&quot;P52D&quot;),
  &quot;dr2&quot;: day_time_duration(&quot;P31DT1H1M1.111S&quot;),
  &quot;dr3&quot;: day_time_duration(&quot;PT7H56M42S&quot;),
  &quot;dr4&quot;: null
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="current_date"></a>current_date</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">current_date()
</pre></div></div>
</li>
<li>

<p>Gets the current date.</p>
</li>
<li>Arguments: None</li>
<li>Return Value:
<ul>

<li>a <tt>date</tt> value of the date when the function is called.</li>
</ul>
</li>
</ul></div>
<div class="section">
<h3><a name="current_time"></a>current_time</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">current_time()
</pre></div></div>
</li>
<li>

<p>Get the current time</p>
</li>
<li>Arguments: None</li>
<li>Return Value:
<ul>

<li>a <tt>time</tt> value of the time when the function is called.</li>
</ul>
</li>
</ul></div>
<div class="section">
<h3><a name="current_datetime"></a>current_datetime</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">current_datetime()
</pre></div></div>
</li>
<li>

<p>Get the current datetime</p>
</li>
<li>Arguments: None</li>
<li>Return Value:
<ul>

<li>a <tt>datetime</tt> value of the datetime when the function is called.</li>
</ul>
</li>
</ul></div>
<div class="section">
<h3><a name="get_date_from_datetime"></a>get_date_from_datetime</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_date_from_datetime(datetime)
</pre></div></div>
</li>
<li>

<p>Gets the date value from the given datetime value <tt>datetime</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>datetime</tt>: a <tt>datetime</tt> value to be extracted from.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>date</tt> value from the datetime,</li>
<li>any other non-datetime input value will cause a type error.</li>
</ul>
</li>
</ul></div>
<div class="section">
<h3><a name="get_time_from_datetime"></a>get_time_from_datetime</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_time_from_datetime(datetime)
</pre></div></div>
</li>
<li>

<p>Get the time value from the given datetime value <tt>datetime</tt></p>
</li>
<li>Arguments:
<ul>

<li><tt>datetime</tt>: a <tt>datetime</tt> value to be extracted from.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>time</tt> value from the datetime.</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-datetime input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">get_time_from_datetime(datetime(&quot;2016-03-26T10:10:00&quot;));
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">time(&quot;10:10:00.000Z&quot;)
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="day_of_week"></a>day_of_week</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">day_of_week(date)
</pre></div></div>
</li>
<li>

<p>Finds the day of the week for a given date (1_7)</p>
</li>
<li>Arguments:
<ul>

<li><tt>date</tt>: a <tt>date</tt> value (Can also be a <tt>datetime</tt>)</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>tinyint</tt> representing the day of the week (1_7),</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-date input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">day_of_week(datetime(&quot;2012-12-30T12:12:12.039Z&quot;));
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">7
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="date_from_unix_time_in_days"></a>date_from_unix_time_in_days</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">date_from_unix_time_in_days(numeric_value)
</pre></div></div>
</li>
<li>

<p>Gets a date representing the time after <tt>numeric_value</tt> days since 1970_01_01.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt> value representing the number of days.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>date</tt> value as the time after <tt>numeric_value</tt> days since 1970-01-01,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
</ul></div>
<div class="section">
<h3><a name="datetime_from_unix_time_in_ms"></a>datetime_from_unix_time_in_ms</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">datetime_from_unix_time_in_ms(numeric_value)
</pre></div></div>
</li>
<li>

<p>Gets a datetime representing the time after <tt>numeric_value</tt> milliseconds since 1970_01_01T00:00:00Z.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt> value representing the number of milliseconds.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>datetime</tt> value as the time after <tt>numeric_value</tt> milliseconds since 1970-01-01T00:00:00Z,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
</ul></div>
<div class="section">
<h3><a name="datetime_from_unix_time_in_secs"></a>datetime_from_unix_time_in_secs</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">datetime_from_unix_time_in_secs(numeric_value)
</pre></div></div>
</li>
<li>

<p>Gets a datetime representing the time after <tt>numeric_value</tt> seconds since 1970_01_01T00:00:00Z.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt> value representing the number of seconds.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>datetime</tt> value as the time after <tt>numeric_value</tt> seconds since 1970_01_01T00:00:00Z,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
</ul></div>
<div class="section">
<h3><a name="datetime_from_date_time"></a>datetime_from_date_time</h3>
<ul>

<li>Syntax:</li>
</ul>
<p>datetime_from_date_time(date,time)</p>
<ul>

<li>Gets a datetime representing the combination of <tt>date</tt> and <tt>time</tt>
<ul>

<li>Arguments:</li>
<li><tt>date</tt>: a <tt>date</tt> value</li>
<li><tt>time</tt> a <tt>time</tt> value</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>datetime</tt> value by combining <tt>date</tt> and <tt>time</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if
<ul>

<li>the first argument is any other non-date value,</li>
<li>or, the second argument is any other non-time value.</li>
</ul>
</li>
</ul>
</li>
</ul></div>
<div class="section">
<h3><a name="time_from_unix_time_in_ms"></a>time_from_unix_time_in_ms</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">time_from_unix_time_in_ms(numeric_value)
</pre></div></div>
</li>
<li>

<p>Gets a time representing the time after <tt>numeric_value</tt> milliseconds since 00:00:00.000Z.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt> value representing the number of milliseconds.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>time</tt> value as the time after <tt>numeric_value</tt> milliseconds since 00:00:00.000Z,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;date&quot;: date_from_unix_time_in_days(15800),
  &quot;datetime&quot;: datetime_from_unix_time_in_ms(1365139700000),
  &quot;time&quot;: time_from_unix_time_in_ms(3748)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;date&quot;: date(&quot;2013-04-05&quot;), &quot;datetime&quot;: datetime(&quot;2013-04-05T05:28:20.000Z&quot;), &quot;time&quot;: time(&quot;00:00:03.748Z&quot;) }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="unix_time_from_date_in_days"></a>unix_time_from_date_in_days</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">unix_time_from_date_in_days(date_value)
</pre></div></div>
</li>
<li>

<p>Gets an integer value representing the number of days since 1970_01_01 for <tt>date_value</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>date_value</tt>: a <tt>date</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>bigint</tt> value representing the number of days,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-date input value will cause a type error.</li>
</ul>
</li>
</ul></div>
<div class="section">
<h3><a name="unix_time_from_datetime_in_ms"></a>unix_time_from_datetime_in_ms</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">unix_time_from_datetime_in_ms(datetime_value)
</pre></div></div>
</li>
<li>

<p>Gets an integer value representing the time in milliseconds since 1970_01_01T00:00:00Z for <tt>datetime_value</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>datetime_value</tt> : a <tt>datetime</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>bigint</tt> value representing the number of milliseconds,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-datetime input value will cause a type error.</li>
</ul>
</li>
</ul></div>
<div class="section">
<h3><a name="unix_time_from_datetime_in_secs"></a>unix_time_from_datetime_in_secs</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">unix_time_from_datetime_in_secs(datetime_value)
</pre></div></div>
</li>
<li>

<p>Gets an integer value representing the time in seconds since 1970_01_01T00:00:00Z for <tt>datetime_value</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>datetime_value</tt> : a <tt>datetime</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>bigint</tt> value representing the number of seconds,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-datetime input value will cause a type error.</li>
</ul>
</li>
</ul></div>
<div class="section">
<h3><a name="unix_time_from_time_in_ms"></a>unix_time_from_time_in_ms</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">unix_time_from_time_in_ms(time_value)
</pre></div></div>
</li>
<li>

<p>Gets an integer value representing the time the milliseconds since 00:00:00.000Z for <tt>time_value</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>time_value</tt> : a <tt>time</tt> value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>bigint</tt> value representing the number of milliseconds,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-datetime input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;date&quot;: date_from_unix_time_in_days(15800),
  &quot;datetime&quot;: datetime_from_unix_time_in_ms(1365139700000),
  &quot;time&quot;: time_from_unix_time_in_ms(3748)
}
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;date&quot;: date(&quot;2013-04-05&quot;), &quot;datetime&quot;: datetime(&quot;2013-04-05T05:28:20.000Z&quot;), &quot;time&quot;: time(&quot;00:00:03.748Z&quot;) }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="parse_date.2Fparse_time.2Fparse_datetime"></a>parse_date/parse_time/parse_datetime</h3>
<ul>

<li>Syntax:</li>
</ul>
<p>parse_date/parse_time/parse_datetime(date,formatting_expression)</p>
<ul>

<li>Creates a <tt>date/time/date_time</tt> value by treating <tt>date</tt> with formatting <tt>formatting_expression</tt></li>
<li>Arguments:
<ul>

<li><tt>date</tt>: a <tt>string</tt> value representing the <tt>date/time/datetime</tt>.</li>
<li><tt>formatting_expression</tt> a <tt>string</tt> value providing the formatting for <tt>date_expression</tt>.Characters used to create date expression:</li>
<li><tt>h</tt> hours</li>
<li><tt>m</tt> minutes</li>
<li><tt>s</tt> seconds</li>
<li><tt>n</tt> milliseconds</li>
<li><tt>a</tt> am/pm</li>
<li><tt>z</tt> timezone</li>
<li><tt>Y</tt> year</li>
<li><tt>M</tt> month</li>
<li><tt>D</tt> day</li>
<li><tt>W</tt> weekday</li>
<li><tt>_</tt>, <tt>'</tt>, <tt>/</tt>, <tt>.</tt>, <tt>,</tt>, <tt>T</tt> seperators for both time and date</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>date/time/date_time</tt> value corresponding to <tt>date</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:</li>
<li>the first argument is any other non-date value,</li>
<li>the second argument is any other non-string value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">parse_time(&quot;30:30&quot;,&quot;m:s&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">time(&quot;00:30:30.000Z&quot;)
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="print_date.2Fprint_time.2Fprint_datetime"></a>print_date/print_time/print_datetime</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">print_date/print_time/print_datetime(date,formatting_expression)
</pre></div></div>
</li>
<li>

<p>Creates a <tt>string</tt> representing a <tt>date/time/date_time</tt> value of the <tt>date</tt> using the formatting <tt>formatting_expression</tt></p>
</li>
<li>Arguments:
<ul>

<li><tt>date</tt>: a <tt>date/time/datetime</tt> value.</li>
<li><tt>formatting_expression</tt> a <tt>string</tt> value providing the formatting for <tt>date_expression</tt>. Characters used to create date expression:</li>
<li><tt>h</tt> hours</li>
<li><tt>m</tt> minutes</li>
<li><tt>s</tt> seconds</li>
<li><tt>n</tt> milliseconds</li>
<li><tt>a</tt> am/pm</li>
<li><tt>z</tt> timezone</li>
<li><tt>Y</tt> year</li>
<li><tt>M</tt> month</li>
<li><tt>D</tt> day</li>
<li><tt>W</tt> weekday</li>
<li><tt>_</tt>, <tt>'</tt>, <tt>/</tt>, <tt>.</tt>, <tt>,</tt>, <tt>T</tt> seperators for both time and date</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>string</tt> value corresponding to <tt>date</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-date value,</li>
<li>the second argument is any other non-string value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">print_time(time(&quot;00:30:30.000Z&quot;),&quot;m:s&quot;);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;30:30&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="get_interval_start.2C_get_interval_end"></a>get_interval_start, get_interval_end</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_interval_start/get_interval_end(interval)
</pre></div></div>
</li>
<li>

<p>Gets the start/end of the given interval.</p>
</li>
<li>Arguments:
<ul>

<li><tt>interval</tt>: the interval to be accessed.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>time</tt>, <tt>date</tt>, or <tt>datetime</tt> (depending on the time instances of the interval) representing the starting or ending time,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-interval value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;start&quot;: get_interval_start(interval_start_from_date(&quot;1984-01-01&quot;, &quot;P1Y&quot;)),
  &quot;end&quot;: get_interval_end(interval_start_from_date(&quot;1984-01-01&quot;, &quot;P1Y&quot;))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;start&quot;: date(&quot;1984_01_01&quot;), &quot;end&quot;: date(&quot;1985_01_01&quot;) }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="get_interval_start_date.2Fget_interval_start_datetimeget_interval_start_time.2C_get_interval_end_date.2Fget_interval_end_datetime.2Fget_interval_end_time"></a>get_interval_start_date/get_interval_start_datetimeget_interval_start_time, get_interval_end_date/get_interval_end_datetime/get_interval_end_time</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_interval_start_date/get_interval_start_datetime/get_interval_start_time/get_interval_end_date/get_interval_end_datetime/get_interval_end_time(interval)
</pre></div></div>
</li>
<li>

<p>Gets the start/end of the given interval for the specific date/datetime/time type.</p>
</li>
<li>Arguments:
<ul>

<li><tt>interval</tt>: the interval to be accessed.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>time</tt>, <tt>date</tt>, or <tt>datetime</tt> (depending on the function) representing the starting or ending time,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-interval value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;start1&quot;: get_interval_start_date(interval_start_from_date(&quot;1984-01-01&quot;, &quot;P1Y&quot;)),
  &quot;end1&quot;: get_interval_end_date(interval_start_from_date(&quot;1984-01-01&quot;, &quot;P1Y&quot;)),
  &quot;start2&quot;: get_interval_start_datetime(interval_start_from_datetime(&quot;1984-01-01T08:30:00.000&quot;, &quot;P1Y1H&quot;)),
  &quot;end2&quot;: get_interval_end_datetime(interval_start_from_datetime(&quot;1984-01-01T08:30:00.000&quot;, &quot;P1Y1H&quot;)),
  &quot;start3&quot;: get_interval_start_time(interval_start_from_time(&quot;08:30:00.000&quot;, &quot;P1H&quot;)),
  &quot;end3&quot;: get_interval_end_time(interval_start_from_time(&quot;08:30:00.000&quot;, &quot;P1H&quot;))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  &quot;start1&quot;: date(&quot;1984-01-01&quot;),
  &quot;end1&quot;: date(&quot;1985-01-01&quot;),
  &quot;start2&quot;: datetime(&quot;1984-01-01T08:30:00.000Z&quot;),
  &quot;end2&quot;: datetime(&quot;1985-01-01T09:30:00.000Z&quot;),
  &quot;start3&quot;: time(&quot;08:30:00.000Z&quot;),
  &quot;end3&quot;: time(&quot;09:30:00.000Z&quot;)
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="get_overlapping_interval"></a>get_overlapping_interval</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_overlapping_interval(interval1, interval2)
</pre></div></div>
</li>
<li>

<p>Gets the start/end of the given interval for the specific date/datetime/time type.</p>
</li>
<li>Arguments:
<ul>

<li><tt>interval1</tt>: an <tt>interval</tt> value</li>
<li><tt>interval2</tt>: an <tt>interval</tt> value</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>interval</tt> that is overlapping <tt>interval1</tt> and <tt>interval2</tt>. If <tt>interval1</tt> and <tt>interval2</tt> do not overlap <tt>null</tt> is returned. Note each interval must be of the same type.</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-interval input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;overlap1&quot;: get_overlapping_interval(interval(time(&quot;11:23:39&quot;), time(&quot;18:27:19&quot;)), interval(time(&quot;12:23:39&quot;), time(&quot;23:18:00&quot;))),
  &quot;overlap2&quot;: get_overlapping_interval(interval(time(&quot;12:23:39&quot;), time(&quot;18:27:19&quot;)), interval(time(&quot;07:19:39&quot;), time(&quot;09:18:00&quot;))),
  &quot;overlap3&quot;: get_overlapping_interval(interval(date(&quot;1980-11-30&quot;), date(&quot;1999-09-09&quot;)), interval(date(&quot;2013-01-01&quot;), date(&quot;2014-01-01&quot;))),
  &quot;overlap4&quot;: get_overlapping_interval(interval(date(&quot;1980-11-30&quot;), date(&quot;2099-09-09&quot;)), interval(date(&quot;2013-01-01&quot;), date(&quot;2014-01-01&quot;))),
  &quot;overlap5&quot;: get_overlapping_interval(interval(datetime(&quot;1844-03-03T11:19:39&quot;), datetime(&quot;2000-10-30T18:27:19&quot;)), interval(datetime(&quot;1989-03-04T12:23:39&quot;), datetime(&quot;2009-10-10T23:18:00&quot;))),
  &quot;overlap6&quot;: get_overlapping_interval(interval(datetime(&quot;1989-03-04T12:23:39&quot;), datetime(&quot;2000-10-30T18:27:19&quot;)), interval(datetime(&quot;1844-03-03T11:19:39&quot;), datetime(&quot;1888-10-10T23:18:00&quot;)))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;overlap1&quot;: interval(time(&quot;12:23:39.000Z&quot;), time(&quot;18:27:19.000Z&quot;)),
  &quot;overlap2&quot;: null,
  &quot;overlap3&quot;: null,
  &quot;overlap4&quot;: interval(date(&quot;2013-01-01&quot;), date(&quot;2014_01_01&quot;)),
  &quot;overlap5&quot;: interval(datetime(&quot;1989-03-04T12:23:39.000Z&quot;), datetime(&quot;2000-10-30T18:27:19.000Z&quot;)),
  &quot;overlap6&quot;: null
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="interval_bin"></a>interval_bin</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">interval_bin(time_to_bin, time_bin_anchor, duration_bin_size)
</pre></div></div>
</li>
<li>

<p>Returns the <tt>interval</tt> value representing the bin containing the <tt>time_to_bin</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>time_to_bin</tt>: a date/time/datetime value representing the time to be binned.</li>
<li><tt>time_bin_anchor</tt>: a date/time/datetime value representing an anchor of a bin starts. The type of this argument should be the same as the first <tt>time_to_bin</tt> argument.</li>
<li><tt>duration_bin_size</tt>: the duration value representing the size of the bin, in the type of year_month_duration or day_time_duration. The type of this duration should be compatible with the type of <tt>time_to_bin</tt>, so that the arithmetic operation between <tt>time_to_bin</tt> and <tt>duration_bin_size</tt> is well_defined. Currently AsterixDB supports the following arithmetic operations:
<ul>

<li>datetime +|_ year_month_duration</li>
<li>datetime +|_ day_time_duration</li>
<li>date +|_ year_month_duration</li>
<li>date +|_ day_time_duration</li>
<li>time +|_ day_time_duration</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>interval</tt> value representing the bin containing the <tt>time_to_bin</tt> value. Note that the internal type of this interval value should be the same as the <tt>time_to_bin</tt> type,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument or the second argument is any other non-date/non-time/non-datetime value,</li>
<li>or, the second argument is any other non-year_month_duration/non-day_time_duration value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;bin1&quot;: interval_bin(date(&quot;2010-10-30&quot;), date(&quot;1990-01-01&quot;), year_month_duration(&quot;P1Y&quot;)),
  &quot;bin2&quot;: interval_bin(datetime(&quot;1987-11-19T23:49:23.938&quot;), datetime(&quot;1990-01-01T00:00:00.000Z&quot;), year_month_duration(&quot;P6M&quot;)),
  &quot;bin3&quot;: interval_bin(time(&quot;12:23:34.930+07:00&quot;), time(&quot;00:00:00&quot;), day_time_duration(&quot;PT1M&quot;)),
  &quot;bin4&quot;: interval_bin(datetime(&quot;1987-11-19T23:49:23.938&quot;), datetime(&quot;2013-01-01T00:00:00.000&quot;), day_time_duration(&quot;PT24H&quot;))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  &quot;bin1&quot;: interval(date(&quot;2010-01-01&quot;),date(&quot;2011-01-01&quot;)),
  &quot;bin2&quot;: interval(datetime(&quot;1987-07-01T00:00:00.000Z&quot;), datetime(&quot;1988-01-01T00:00:00.000Z&quot;)),
  &quot;bin3&quot;: interval(time(&quot;05:23:00.000Z&quot;), time(&quot;05:24:00.000Z&quot;)),
  &quot;bin4&quot;: interval(datetime(&quot;1987-11-19T00:00:00.000Z&quot;), datetime(&quot;1987-11-20T00:00:00.000Z&quot;))
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="interval_start_from_date.2Ftime.2Fdatetime"></a>interval_start_from_date/time/datetime</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">interval_start_from_date/time/datetime(date/time/datetime, duration)
</pre></div></div>
</li>
<li>

<p>Construct an <tt>interval</tt> value by the given starting <tt>date</tt>/<tt>time</tt>/<tt>datetime</tt> and the <tt>duration</tt> that the interval lasts.</p>
</li>
<li>Arguments:
<ul>

<li><tt>date/time/datetime</tt>: a <tt>string</tt> representing a <tt>date</tt>, <tt>time</tt> or <tt>datetime</tt>, or a <tt>date</tt>/<tt>time</tt>/<tt>datetime</tt> value, representing the starting time point.</li>
<li><tt>duration</tt>: a <tt>string</tt> or <tt>duration</tt> value representing the duration of the interval. Note that duration cannot be negative value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>interval</tt> value representing the interval starting from the given time point with the length of duration,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument or the second argument is any other non-date/non-time/non-datetime value,</li>
<li>or, the second argument is any other non-duration value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;interval1&quot;: interval_start_from_date(&quot;1984-01-01&quot;, &quot;P1Y&quot;),
  &quot;interval2&quot;: interval_start_from_time(time(&quot;02:23:28.394&quot;), &quot;PT3H24M&quot;),
  &quot;interval3&quot;: interval_start_from_datetime(&quot;1999-09-09T09:09:09.999&quot;, duration(&quot;P2M30D&quot;))
};
</pre></div></div>
</li>
<li>

<p>The expectecd result is:</p>

<div>
<div>
<pre class="source">{
  &quot;interval1&quot;: interval(date(&quot;1984-01-01&quot;), date(&quot;1985-01-01&quot;)),
  &quot;interval2&quot;: interval(time(&quot;02:23:28.394Z&quot;), time(&quot;05:47:28.394Z&quot;)),
  &quot;interval3&quot;: interval(datetime(&quot;1999-09-09T09:09:09.999Z&quot;), datetime(&quot;1999-12-09T09:09:09.999Z&quot;))
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="overlap_bins"></a>overlap_bins</h3>
<ul>

<li>

<p>Return Value:</p>
<ul>

<li>a <tt>interval</tt> value representing the bin containing the <tt>time_to_bin</tt> value. Note that the internal type of this interval value should be the same as the <tt>time_to_bin</tt> type.</li>
</ul>
</li>
<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">overlap_bins(interval, time_bin_anchor, duration_bin_size)
</pre></div></div>
</li>
<li>

<p>Returns an ordered list of <tt>interval</tt> values representing each bin that is overlapping the <tt>interval</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>interval</tt>: an <tt>interval</tt> value</li>
<li><tt>time_bin_anchor</tt>: a date/time/datetime value representing an anchor of a bin starts. The type of this argument should be the same as the first <tt>time_to_bin</tt> argument.</li>
<li><tt>duration_bin_size</tt>: the duration value representing the size of the bin, in the type of year_month_duration or day_time_duration. The type of this duration should be compatible with the type of <tt>time_to_bin</tt>, so that the arithmetic operation between <tt>time_to_bin</tt> and <tt>duration_bin_size</tt> is well_defined. Currently AsterixDB supports the following arithmetic operations:
<ul>

<li>datetime +|_ year_month_duration</li>
<li>datetime +|_ day_time_duration</li>
<li>date +|_ year_month_duration</li>
<li>date +|_ day_time_duration</li>
<li>time +|_ day_time_duration</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a ordered list of <tt>interval</tt> values representing each bin that is overlapping the <tt>interval</tt>. Note that the internal type as <tt>time_to_bin</tt> and <tt>duration_bin_size</tt>.</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first arugment is any other non-interval value,</li>
<li>or, the second argument is any other non-date/non-time/non-datetime value,</li>
<li>or, the second argument is any other non-year_month_duration/non-day_time_duration value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;timebins&quot;: overlap_bins(interval(time(&quot;17:23:37&quot;), time(&quot;18:30:21&quot;)), time(&quot;00:00:00&quot;), day_time_duration(&quot;PT30M&quot;)),
  &quot;datebins&quot;: overlap_bins(interval(date(&quot;1984-03-17&quot;), date(&quot;2013-08-22&quot;)), date(&quot;1990-01-01&quot;), year_month_duration(&quot;P10Y&quot;)),
  &quot;datetimebins&quot;: overlap_bins(interval(datetime(&quot;1800-01-01T23:59:48.938&quot;), datetime(&quot;2015-07-26T13:28:30.218&quot;)),
                              datetime(&quot;1900-01-01T00:00:00.000&quot;), year_month_duration(&quot;P100Y&quot;))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  &quot;timebins&quot;: [
                interval(time(&quot;17:00:00.000Z&quot;), time(&quot;17:30:00.000Z&quot;)),
                interval(time(&quot;17:30:00.000Z&quot;), time(&quot;18:00:00.000Z&quot;)),
                interval(time(&quot;18:00:00.000Z&quot;), time(&quot;18:30:00.000Z&quot;)),
                interval(time(&quot;18:30:00.000Z&quot;), time(&quot;19:00:00.000Z&quot;))
              ],
  &quot;datebins&quot;: [
                interval(date(&quot;1980-01-01&quot;), date(&quot;1990-01-01&quot;)),
                interval(date(&quot;1990-01-01&quot;), date(&quot;2000-01-01&quot;)),
                interval(date(&quot;2000-01-01&quot;), date(&quot;2010-01-01&quot;)),
                interval(date(&quot;2010-01-01&quot;), date(&quot;2020-01-01&quot;))
              ],
  &quot;datetimebins&quot;: [
                    interval(datetime(&quot;1800-01-01T00:00:00.000Z&quot;), datetime(&quot;1900-01-01T00:00:00.000Z&quot;)),
                    interval(datetime(&quot;1900-01-01T00:00:00.000Z&quot;), datetime(&quot;2000-01-01T00:00:00.000Z&quot;)),
                    interval(datetime(&quot;2000-01-01T00:00:00.000Z&quot;), datetime(&quot;2100-01-01T00:00:00.000Z&quot;))
                   ]
};
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div>
<div class="section">
<h3><a name="interval_before.2C_interval_after"></a>interval_before, interval_after</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">interval_before(interval1, interval2)
interval_after(interval1, interval2)
</pre></div></div>
</li>
<li>

<p>These two functions check whether an interval happens before/after another interval.</p>
</li>
<li>Arguments:
<ul>

<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> value. Specifically, <tt>interval_before(interval1, interval2)</tt> is true if and only if <tt>interval1.end &lt; interval2.start</tt>, and <tt>interval_after(interval1, interval2)</tt> is true if and only if <tt>interval1.start &gt; interval2.end</tt>.</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-interval input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Examples:</p>

<div>
<div>
<pre class="source">{
  &quot;interval_before&quot;: interval_before(interval(date(&quot;2000-01-01&quot;), date(&quot;2005-01-01&quot;)),
                                     interval(date(&quot;2005-05-01&quot;), date(&quot;2012-09-09&quot;))),
  &quot;interval_after&quot;: interval_after(interval(date(&quot;2005-05-01&quot;), date(&quot;2012-09-09&quot;)),
                                   interval(date(&quot;2000-01-01&quot;), date(&quot;2005-01-01&quot;)))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;interval_before&quot;: true, &quot;interval_after&quot;: true }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="interval_covers.2C_interval_covered_by"></a>interval_covers, interval_covered_by</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">interval_covers(interval1, interval2)
interval_covered_by(interval1, interval2)
</pre></div></div>
</li>
<li>

<p>These two functions check whether one interval covers the other interval.</p>
</li>
<li>Arguments:
<ul>

<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>

<p>a <tt>boolean</tt> value. Specifically, <tt>interval_covers(interval1, interval2)</tt> is true if and only if</p>
<p>interval1.start &lt;= interval2.start AND interval1.end &gt;= interval2.end</p>
<p><tt>interval_covered_by(interval1, interval2)</tt> is true if and only if</p>
<p>interval2.start &lt;= interval1.start AND interval2.end &gt;= interval1.end</p>
</li>
<li>

<p><tt>missing</tt> if the argument is a <tt>missing</tt> value,</p>
</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-interval input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Examples:</p>

<div>
<div>
<pre class="source">{
  &quot;interval_covers&quot;: interval_covers(interval(date(&quot;2000-01-01&quot;), date(&quot;2005-01-01&quot;)),
                                     interval(date(&quot;2000-03-01&quot;), date(&quot;2004-09-09&quot;))),
  &quot;interval_covered_by&quot;: interval_covered_by(interval(date(&quot;2006-08-01&quot;), date(&quot;2007-03-01&quot;)),
                                             interval(date(&quot;2004-09-10&quot;), date(&quot;2012-08-01&quot;)))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;interval_covers&quot;: true, &quot;interval_covered_by&quot;: true }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="interval_overlaps.2C_interval_overlapped_by"></a>interval_overlaps, interval_overlapped_by</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">interval_overlaps(interval1, interval2)
interval_overlapped_by(interval1, interval2)
</pre></div></div>
</li>
<li>

<p>These functions check whether two intervals overlap with each other.</p>
</li>
<li>Arguments:
<ul>

<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> value. Specifically, <tt>interval_overlaps(interval1, interval2)</tt> is true if and only if
<p>interval1.start &lt; interval2.start AND interval2.end &gt; interval1.end AND interval1.end &gt; interval2.start</p></li>
</ul>
<p><tt>interval_overlapped_by(interval1, interval2)</tt> is true if and only if</p>

<div>
<div>
<pre class="source">interval2.start &lt; interval1.start
AND interval1.end &gt; interval2.end
AND interval2.end &gt; interval1.start
</pre></div></div>

<ul>

<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-interval input value will cause a type error.</li>
</ul>
<p>Note that <tt>interval_overlaps</tt> and <tt>interval_overlapped_by</tt> are following the Allen&#x2019;s relations on the definition of overlap.</p>
</li>
<li>

<p>Examples:</p>

<div>
<div>
<pre class="source">{
  &quot;overlaps&quot;: interval_overlaps(interval(date(&quot;2000-01-01&quot;), date(&quot;2005-01-01&quot;)),
                                interval(date(&quot;2004-05-01&quot;), date(&quot;2012-09-09&quot;))),
  &quot;overlapped_by&quot;: interval_overlapped_by(interval(date(&quot;2006-08-01&quot;), date(&quot;2007-03-01&quot;)),
                                          interval(date(&quot;2004-05-01&quot;), date(&quot;2012-09-09&quot;))))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;overlaps&quot;: true, &quot;overlapped_by&quot;: true }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="interval_overlapping"></a>interval_overlapping</h3>
<p>Note that <tt>interval_overlapping</tt> is not an Allen&#x2019;s Relation, but syntactic sugar we added for the case that the intersect of two intervals is not empty. Basically this function returns true if any of these functions return true: <tt>interval_overlaps</tt>, <tt>interval_overlapped_by</tt>, <tt>interval_covers</tt>, or <tt>interval_covered_by</tt>.</p>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">interval_overlapping(interval1, interval2)
</pre></div></div>
</li>
<li>

<p>This functions check whether two intervals share any points with each other.</p>
</li>
<li>Arguments:
<ul>

<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>

<p>a <tt>boolean</tt> value. Specifically, <tt>interval_overlapping(interval1, interval2)</tt> is true if</p>
<p>interval1.start &lt; interval2.end AND interval1.end &gt; interval2.start</p>
</li>
<li>

<p><tt>missing</tt> if the argument is a <tt>missing</tt> value,</p>
</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-interval input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Examples:</p>

<div>
<div>
<pre class="source">{
  &quot;overlapping1&quot;: interval_overlapping(interval(date(&quot;2000-01-01&quot;), date(&quot;2005-01-01&quot;)),
                                       interval(date(&quot;2004-05-01&quot;), date(&quot;2012-09-09&quot;))),
  &quot;overlapping2&quot;: interval_overlapping(interval(date(&quot;2006-08-01&quot;), date(&quot;2007-03-01&quot;)),
                                       interval(date(&quot;2004-09-10&quot;), date(&quot;2006-12-31&quot;)))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;overlapping1&quot;: true, &quot;overlapping2&quot;: true }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="interval_meets.2C_interval_met_by"></a>interval_meets, interval_met_by</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">interval_meets(interval1, interval2)
interval_met_by(interval1, interval2)
</pre></div></div>
</li>
<li>

<p>These two functions check whether an interval meets with another interval.</p>
</li>
<li>Arguments:
<ul>

<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> value. Specifically, <tt>interval_meets(interval1, interval2)</tt> is true if and only if <tt>interval1.end = interval2.start</tt>, and <tt>interval_met_by(interval1, interval2)</tt> is true if and only if <tt>interval1.start = interval2.end</tt>. If any of the two inputs is <tt>null</tt>, <tt>null</tt> is returned.</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-interval input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Examples:</p>

<div>
<div>
<pre class="source">{
  &quot;meets&quot;: interval_meets(interval(date(&quot;2000-01-01&quot;), date(&quot;2005-01-01&quot;)),
                          interval(date(&quot;2005-01-01&quot;), date(&quot;2012-09-09&quot;))),
  &quot;metby&quot;: interval_met_by(interval(date(&quot;2006-08-01&quot;), date(&quot;2007-03-01&quot;)),
                           interval(date(&quot;2004-09-10&quot;), date(&quot;2006-08-01&quot;)))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;meets&quot;: true, &quot;metby&quot;: true }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="interval_starts.2C_interval_started_by"></a>interval_starts, interval_started_by</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">interval_starts(interval1, interval2)
interval_started_by(interval1, interval2)
</pre></div></div>
</li>
<li>

<p>These two functions check whether one interval starts with the other interval.</p>
</li>
<li>Arguments:
<ul>

<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> value. Specifically, <tt>interval_starts(interval1, interval2)</tt> returns true if and only if
<p>interval1.start = interval2.start AND interval1.end &lt;= interval2.end</p></li>
</ul>
<p><tt>interval_started_by(interval1, interval2)</tt> returns true if and only if</p>

<div>
<div>
<pre class="source">interval1.start = interval2.start
AND interval2.end &lt;= interval1.end
</pre></div></div>

<ul>

<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-interval input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Examples:</p>

<div>
<div>
<pre class="source">{
  &quot;interval_starts&quot;: interval_starts(interval(date(&quot;2000-01-01&quot;), date(&quot;2005-01-01&quot;)),
                                     interval(date(&quot;2000-01-01&quot;), date(&quot;2012-09-09&quot;))),
  &quot;interval_started_by&quot;: interval_started_by(interval(date(&quot;2006-08-01&quot;), date(&quot;2007-03-01&quot;)),
                                             interval(date(&quot;2006-08-01&quot;), date(&quot;2006-08-02&quot;)))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;interval_starts&quot;: true, &quot;interval_started_by&quot;: true }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="interval_ends.2C_interval_ended_by"></a>interval_ends, interval_ended_by</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">interval_ends(interval1, interval2)
interval_ended_by(interval1, interval2)
</pre></div></div>
</li>
<li>

<p>These two functions check whether one interval ends with the other interval.</p>
</li>
<li>Arguments:
<ul>

<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>

<p>a <tt>boolean</tt> value. Specifically, <tt>interval_ends(interval1, interval2)</tt> returns true if and only if</p>
<p>interval1.end = interval2.end AND interval1.start &gt;= interval2.start</p>
<p><tt>interval_ended_by(interval1, interval2)</tt> returns true if and only if</p>
<p>interval2.end = interval1.end AND interval2.start &gt;= interval1.start</p>
</li>
<li>

<p><tt>missing</tt> if the argument is a <tt>missing</tt> value,</p>
</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-interval input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Examples:</p>

<div>
<div>
<pre class="source">{
  &quot;interval_ends&quot;: interval_ends(interval(date(&quot;2000-01-01&quot;), date(&quot;2005-01-01&quot;)),
                                 interval(date(&quot;1998-01-01&quot;), date(&quot;2005-01-01&quot;))),
  &quot;interval_ended_by&quot;: interval_ended_by(interval(date(&quot;2006-08-01&quot;), date(&quot;2007-03-01&quot;)),
                                         interval(date(&quot;2006-09-10&quot;), date(&quot;2007-03-01&quot;)))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;interval_ends&quot;: true, &quot;interval_ended_by&quot;: true }
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Object_Functions"></a><a name="ObjectFunctions" id="ObjectFunctions">Object Functions</a></h2>
<div class="section">
<h3><a name="get_object_fields"></a>get_object_fields</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_object_fields(input_object)
</pre></div></div>
</li>
<li>

<p>Access the object field names, type and open status for a given object.</p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt> : a object value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an array of <tt>object</tt> values that include the field_name <tt>string</tt>, field_type <tt>string</tt>, is_open <tt>boolean</tt> (used for debug purposes only: <tt>true</tt> if field is open and <tt>false</tt> otherwise), and optional nested <tt>orderedList</tt> for the values of a nested object,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value,</li>
<li>any other non-object input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">get_object_fields(
                  {
                    &quot;id&quot;: 1,
                    &quot;project&quot;: &quot;AsterixDB&quot;,
                    &quot;address&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;},
                    &quot;related&quot;: [&quot;Hivestrix&quot;, &quot;Preglix&quot;, &quot;Apache VXQuery&quot;]
                  }
                 );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  { &quot;field-name&quot;: &quot;id&quot;, &quot;field-type&quot;: &quot;INT64&quot;, &quot;is-open&quot;: false },
  { &quot;field-name&quot;: &quot;project&quot;, &quot;field-type&quot;: &quot;STRING&quot;, &quot;is-open&quot;: false },
  { &quot;field-name&quot;: &quot;address&quot;, &quot;field-type&quot;: &quot;RECORD&quot;, &quot;is-open&quot;: false,
    &quot;nested&quot;: [
                { &quot;field-name&quot;: &quot;city&quot;, &quot;field-type&quot;: &quot;STRING&quot;, &quot;is-open&quot;: false },
                { &quot;field-name&quot;: &quot;state&quot;, &quot;field-type&quot;: &quot;STRING&quot;, &quot;is-open&quot;: false }
              ]
  },
  { &quot;field-name&quot;:
        &quot;related&quot;,
        &quot;field-type&quot;: &quot;ORDEREDLIST&quot;,
        &quot;is-open&quot;: false,
        &quot;list&quot;: [
                  { &quot;field-type&quot;: &quot;STRING&quot; },
                  { &quot;field-type&quot;: &quot;STRING&quot; },
                  { &quot;field-type&quot;: &quot;STRING&quot; }
                ]
  }
]
</pre></div></div>
</li>
</ul>
<p>]</p></div>
<div class="section">
<h3><a name="get_object_field_value"></a>get_object_field_value</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_object_field_value(input_object, string)
</pre></div></div>
</li>
<li>

<p>Access the field name given in the <tt>string_expression</tt> from the <tt>object_expression</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt> : a <tt>object</tt> value.</li>
<li><tt>string</tt> : a <tt>string</tt> representing the top level field name.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>any</tt> value saved in the designated field of the object,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-object value,</li>
<li>or, the second argument is any other non-string value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">get_object_field_value({
                         &quot;id&quot;: 1,
                         &quot;project&quot;: &quot;AsterixDB&quot;,
                         &quot;address&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;},
                         &quot;related&quot;: [&quot;Hivestrix&quot;, &quot;Preglix&quot;, &quot;Apache VXQuery&quot;]
                        },
                        &quot;project&quot;
                       );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">&quot;AsterixDB&quot;
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_remove_fields"></a>object_remove_fields</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_remove_fields(input_object, field_names)
</pre></div></div>
</li>
<li>

<p>Remove indicated fields from a object given a list of field names.</p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt>:  a object value.</li>
<li><tt>field_names</tt>: an array of strings and/or array of array of strings.</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>a new object value without the fields listed in the second argument,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-object value,</li>
<li>or, the second argument is any other non-array value or recursively contains non-string items.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_remove_fields(
                       {
                         &quot;id&quot;:1,
                         &quot;project&quot;:&quot;AsterixDB&quot;,
                         &quot;address&quot;:{&quot;city&quot;:&quot;Irvine&quot;, &quot;state&quot;:&quot;CA&quot;},
                         &quot;related&quot;:[&quot;Hivestrix&quot;, &quot;Preglix&quot;, &quot;Apache VXQuery&quot;]
                       },
                       [[&quot;address&quot;, &quot;city&quot;], &quot;related&quot;]
                     );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  &quot;id&quot;:1,
  &quot;project&quot;:&quot;AsterixDB&quot;,
  &quot;address&quot;:{ &quot;state&quot;: &quot;CA&quot; }
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_add_fields"></a>object_add_fields</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_add_fields(input_object, fields)
</pre></div></div>
</li>
<li>

<p>Add fields to a object given a list of field names.</p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt> : a object value.</li>
<li><tt>fields</tt>: an array of field descriptor objects where each object has field_name and  field_value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a new object value with the new fields included,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>a type error will be raised if:
<ul>

<li>the first argument is any other non-object value,</li>
<li>the second argument is any other non-array value, or contains non-object items.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_add_fields(
                   {
                     &quot;id&quot;:1,
                     &quot;project&quot;:&quot;AsterixDB&quot;,
                     &quot;address&quot;:{&quot;city&quot;:&quot;Irvine&quot;, &quot;state&quot;:&quot;CA&quot;},
                     &quot;related&quot;:[&quot;Hivestrix&quot;, &quot;Preglix&quot;, &quot;Apache VXQuery&quot;]
                    },
                    [{&quot;field-name&quot;:&quot;employment_location&quot;, &quot;field-value&quot;:create_point(30.0,70.0)}]
                  );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
   &quot;id&quot;:1,
   &quot;project&quot;:&quot;AsterixDB&quot;,
   &quot;address&quot;:{&quot;city&quot;:&quot;Irvine&quot;, &quot;state&quot;:&quot;CA&quot;},
   &quot;related&quot;:[&quot;Hivestrix&quot;, &quot;Preglix&quot;, &quot;Apache VXQuery&quot;]
   &quot;employment_location&quot;: point(&quot;30.0,70.0&quot;)
 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_merge"></a>object_merge</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_merge(object1, object2)
</pre></div></div>
</li>
<li>

<p>Merge two different objects into a new object.</p>
</li>
<li>Arguments:
<ul>

<li><tt>object1</tt> : a object value.</li>
<li><tt>object2</tt> : a object value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a new object value with fields from both input objects. If a field&#x2019;s names in both objects are the same, an exception is issued,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>any other non-object input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_merge(
              {
                &quot;id&quot;:1,
                &quot;project&quot;:&quot;AsterixDB&quot;,
                &quot;address&quot;:{&quot;city&quot;:&quot;Irvine&quot;, &quot;state&quot;:&quot;CA&quot;},
                &quot;related&quot;:[&quot;Hivestrix&quot;, &quot;Preglix&quot;, &quot;Apache VXQuery&quot;]
              },
              {
                &quot;user_id&quot;: 22,
                &quot;employer&quot;: &quot;UC Irvine&quot;,
                &quot;employment_type&quot;: &quot;visitor&quot;
              }
            );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  &quot;employment_type&quot;: &quot;visitor&quot;,
  &quot;address&quot;: {
    &quot;city&quot;: &quot;Irvine&quot;,
    &quot;state&quot;: &quot;CA&quot;
  },
  &quot;related&quot;: [
    &quot;Hivestrix&quot;,
    &quot;Preglix&quot;,
    &quot;Apache VXQuery&quot;
  ],
  &quot;user_id&quot;: 22,
  &quot;project&quot;: &quot;AsterixDB&quot;,
  &quot;employer&quot;: &quot;UC Irvine&quot;,
  &quot;id&quot;: 1
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_length"></a>object_length</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_length(input_object)
</pre></div></div>
</li>
<li>

<p>Returns number of top-level fields in the given object</p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt> : an object value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an integer that represents the number of top-level fields in the given object,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value or any other non-object value</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_length(
               {
                 &quot;id&quot;: 1,
                 &quot;project&quot;: &quot;AsterixDB&quot;,
                 &quot;address&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;},
               }
             );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">3
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_names"></a>object_names</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_names(input_object)
</pre></div></div>
</li>
<li>

<p>Returns names of top-level fields in the given object</p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt> : an object value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an array with top-level field names of the given object,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value or any other non-object value</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_names(
               {
                 &quot;id&quot;: 1,
                 &quot;project&quot;: &quot;AsterixDB&quot;,
                 &quot;address&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;},
               }
             );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[ &quot;id&quot;, &quot;project&quot;, &quot;address&quot; ]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_remove"></a>object_remove</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_remove(input_object, field_name)
</pre></div></div>
</li>
<li>

<p>Returns a new object that has the same fields as the input object except the field to be removed</p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt> : an object value.</li>
<li><tt>field_name</tt> : a string field name.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>A new object that has the same fields as <tt>input_object</tt> except the field <tt>field_name</tt>,</li>
<li><tt>missing</tt> if the argument <tt>input_object</tt> or <tt>field_name</tt> is missing,</li>
<li><tt>null</tt> if the argument <tt>input_object</tt> is <tt>null</tt> or any other non-object value, or the argument <tt>field_name</tt> is <tt>null</tt> or any other non-string value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_remove(
               {
                 &quot;id&quot;: 1,
                 &quot;project&quot;: &quot;AsterixDB&quot;,
                 &quot;address&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;}
               }
               , &quot;address&quot;
             );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  &quot;id&quot;: 1,
  &quot;project&quot;: &quot;AsterixDB&quot;,
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_rename"></a>object_rename</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_rename(input_object, old_field, new_field)
</pre></div></div>
</li>
<li>

<p>Returns a new object that has the same fields as <tt>input_object</tt> with field <tt>old_field</tt> replaced by <tt>new_field</tt></p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt> : an object value.</li>
<li><tt>old_field</tt> : a string representing the old (original) field name inside the object <tt>input_object</tt>.</li>
<li><tt>new_field</tt> : a string representing the new field name to replace <tt>old_field</tt> inside the object <tt>input_object</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>A new object that has the same fields as <tt>input_object</tt> with field <tt>old_field</tt> replaced by <tt>new_field</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is <tt>null</tt> or <tt>input_object</tt> is non-object value, or <tt>old_field</tt> is non-string value, or <tt>new_field</tt> is any non-string value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_rename(
               {
                 &quot;id&quot;: 1,
                 &quot;project&quot;: &quot;AsterixDB&quot;,
                 &quot;address&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;}
               }
               , &quot;address&quot;
               , &quot;location&quot;
             );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  &quot;id&quot;: 1,
  &quot;project&quot;: &quot;AsterixDB&quot;,
  &quot;location&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;}
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_unwrap"></a>object_unwrap</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_unwrap(input_object)
</pre></div></div>
</li>
<li>

<p>Returns the value of the single name-value pair that appears in <tt>input_object</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt> : an object value that consists of exactly one name-value pair.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>The value of the single name-value pair that appears in <tt>input_object</tt>,</li>
<li><tt>missing</tt> if <tt>input_object</tt> is <tt>missing</tt>,</li>
<li><tt>null</tt> if <tt>input_object</tt> is null, or an empty object, or there is more than one name-value pair in <tt>input_object</tt>, or any non-object value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_unwrap(
             {
               &quot;id&quot;: 1
             }
           );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  1
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_replace"></a>object_replace</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_replace(input_object, old_value, new_value)
</pre></div></div>
</li>
<li>

<p>Returns a new object that has the same fields as <tt>input_object</tt> with all occurrences of value <tt>old_value</tt> replaced by <tt>new_value</tt></p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt> : an object value.</li>
<li><tt>old_value</tt> : a primitive type value to be replaced by <tt>new_value</tt>.</li>
<li><tt>new_value</tt> : a value to replace <tt>old_value</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>A new object that has the same fields as <tt>input_object</tt> with all occurrences of value <tt>old_value</tt> replaced by <tt>new_value</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if <tt>input_object</tt>  or <tt>old_value</tt> is null,</li>
<li>a type error will be raised if:
<ul>

<li><tt>old_value</tt> is not a primitive type value.</li>
</ul>
</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_replace(
               {
                 &quot;id&quot;: 1,
                 &quot;project&quot;: &quot;AsterixDB&quot;,
                 &quot;address&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;}
               }
               , &quot;AsterixDB&quot;
               , &quot;Apache AsterixDB&quot;
             );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  &quot;id&quot;: 1,
  &quot;project&quot;: &quot;Apache AsterixDB&quot;,
  &quot;location&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;}
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_add"></a>object_add</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_add(input_object, field_name, field_value)
</pre></div></div>
</li>
<li>

<p>Returns a new object that has the same fields as <tt>input_object</tt> as well as the new field <tt>field_name</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt> : an object value.</li>
<li><tt>field_name</tt> : a string representing a field name to be added.</li>
<li><tt>field_value</tt> : a value to be assigned to the new field <tt>field_name</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>A new object that has the same fields as <tt>input_object</tt> as well as the new field <tt>field_name</tt>,</li>
<li><tt>missing</tt> if <tt>input_object</tt> or <tt>field_name</tt> is <tt>missing</tt>,</li>
<li><tt>null</tt> if <tt>input_object</tt> or <tt>field_name</tt> is <tt>null</tt>, or <tt>input_object</tt> is not an object, or <tt>field_name</tt> is not a string,</li>
<li><tt>input_object</tt> if <tt>field_name</tt>already exists in <tt>input_object</tt> or <tt>field_value</tt> is missing.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_add(
               {
                 &quot;id&quot;: 1,
                 &quot;project&quot;: &quot;AsterixDB&quot;,
                 &quot;address&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;}
               }
               , &quot;company&quot;
               , &quot;Apache&quot;
             );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  &quot;id&quot;: 1,
  &quot;project&quot;: &quot;AsterixDB&quot;,
  &quot;location&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;},
  &quot;company&quot;: &quot;Apache&quot;
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_put"></a>object_put</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_put(input_object, field_name, field_value)
</pre></div></div>
</li>
<li>

<p>Adds, modifies, or removes a field of an object.</p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt> : an object value.</li>
<li><tt>field_name</tt> : a string representing a field name to be added.</li>
<li><tt>field_value</tt> : a value to be assigned to the new field <tt>field_name</tt>.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a new object that has the same fields as <tt>input_object</tt> as well as the new field <tt>field_name</tt>, or with updated <tt>field_name</tt> value to <tt>field_value</tt> if <tt>field_name</tt> already exists in <tt>input_object</tt>, or with <tt>field_name</tt>removed if <tt>field_name</tt> already exists in <tt>input_object</tt> and <tt>field_value</tt> is <tt>missing</tt>,</li>
<li><tt>missing</tt> if <tt>input_object</tt> or <tt>field_name</tt> is <tt>missing</tt>,</li>
<li><tt>null</tt> if <tt>input_object</tt> or <tt>field_name</tt> is <tt>null</tt>, or <tt>input_object</tt> is not an object, or <tt>field_name</tt> is not not a string.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_put(
               {
                 &quot;id&quot;: 1,
                 &quot;project&quot;: &quot;AsterixDB&quot;,
                 &quot;address&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;}
               }
               , &quot;project&quot;
               , &quot;Apache AsterixDB&quot;
             );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{
  &quot;id&quot;: 1,
  &quot;project&quot;: &quot;Apache AsterixDB&quot;,
  &quot;location&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;}
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_values"></a>object_values</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_values(input_object)
</pre></div></div>
</li>
<li>

<p>Returns an array of the values of the fields in <tt>input_object</tt>.</p>
</li>
<li>Arguments:
<ul>

<li><tt>input_object</tt> : an object value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>An array of the values of the fields in <tt>input_object</tt>,</li>
<li><tt>missing</tt> if <tt>input_object</tt> is <tt>missing</tt>,</li>
<li><tt>null</tt> if <tt>input_object</tt> is null or any non-object value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_values(
               {
                 &quot;id&quot;: 1,
                 &quot;project&quot;: &quot;AsterixDB&quot;,
                 &quot;address&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;}
               }
             );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  1,
  &quot;AsterixDB&quot;,
  {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;}
]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="object_pairs"></a>object_pairs</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">object_pairs(input_object)
</pre></div></div>
</li>
<li>

<p>Returns an array of objects describing fields of <tt>input_object</tt>. For each field of the <tt>input_object</tt> the returned array contains an object with two fields <tt>name</tt> and <tt>value</tt> which are set to the <tt>input_object</tt>&#x2019;s field name and value.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>input_object</tt> : an object value.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>An array of the <tt>name</tt>/<tt>value</tt> pairs of the fields in <tt>input_object</tt>,</li>
<li><tt>missing</tt> if <tt>input_object</tt> is <tt>missing</tt>,</li>
<li><tt>null</tt> if <tt>input_object</tt> is null or any non-object value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">object_pairs(
              {
                &quot;id&quot;: 1,
                &quot;project&quot;: &quot;AsterixDB&quot;,
                &quot;address&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;}
              }
            );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  { &quot;name&quot;: &quot;id&quot;, &quot;value&quot;: 1 },
  { &quot;name&quot;: &quot;project&quot;, &quot;value&quot;: &quot;AsterixDB&quot; },
  { &quot;name&quot;: &quot;address&quot;, &quot;value&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;} }
]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="pairs"></a>pairs</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">pairs(input_object)
</pre></div></div>
</li>
<li>

<p>Returns an array of arrays describing fields of <tt>input_object</tt>, including nested fields. For each field of the <tt>input_object</tt> the returned array contains an array with two elements. The first element is the name and the second one is the value of the <tt>input_object</tt>&#x2019;s field. The input object is introspected recursively, so all fields of its nested objects are returned. Nested objects contained in arrays and multisets are also processed by this function.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>input_object</tt> : an object value (or an array or a multiset)</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>An array of arrays with name, value pairs of the fields in <tt>input_object</tt>, including nested fields. Each inner array has exactly two items: name and value of the <tt>input_object</tt>&#x2019;s field.</li>
<li><tt>missing</tt> if <tt>input_object</tt> is <tt>missing</tt>,</li>
<li><tt>null</tt> if <tt>input_object</tt> is null or a value of a primitive data type.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">pairs(
       {
         &quot;id&quot;: 1,
         &quot;project&quot;: &quot;AsterixDB&quot;,
         &quot;address&quot;: {&quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot;}
       }
     );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  [ &quot;id&quot;, 1 ],
  [ &quot;project&quot;, &quot;AsterixDB&quot; ],
  [ &quot;address&quot;, { &quot;city&quot;: &quot;Irvine&quot;, &quot;state&quot;: &quot;CA&quot; } ],
  [ &quot;city&quot;, &quot;Irvine&quot; ],
  [ &quot;state&quot;, &quot;CA&quot; ]
]
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Aggregate_Functions_.28Array_Functions.29"></a><a name="AggregateFunctions" id="AggregateFunctions">Aggregate Functions (Array Functions) </a></h2>
<p>This section contains detailed descriptions of the built-in aggregate functions in the query language.</p>
<p>The query language also supports standard SQL aggregate functions (e.g., <tt>MIN</tt>, <tt>MAX</tt>, <tt>SUM</tt>, <tt>COUNT</tt>, and <tt>AVG</tt>). Note that these are not real functions in the query language, but just syntactic sugars over corresponding builtin aggregate functions (e.g., <tt>ARRAY_MIN</tt>, <tt>ARRAY_MAX</tt>, <tt>ARRAY_SUM</tt>, <tt>ARRAY_COUNT</tt>, and <tt>ARRAY_AVG</tt>). Refer to <a href="manual.html#Aggregation_PseudoFunctions">Aggregation Pseudo-Functions</a> for details.</p>
<p>The <tt>DISTINCT</tt> keyword may be used with built-in aggregate functions and standard SQL aggregate functions. It may also be used with aggregate functions used as window functions. It determines whether the function aggregates all values in the group, or distinct values only. Refer to <a href="manual.html#Function_call_expressions">Function Calls</a> for details.</p>
<p>Aggregate functions may be used as window functions when they are used with an OVER clause. Refer to <a href="manual.html#Over_clauses">OVER Clauses</a> for details.</p>
<div class="section">
<h3><a name="array_count"></a>array_count</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">array_count(collection)
</pre></div></div>
</li>
<li>

<p>Gets the number of non-null and non-missing items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> to be counted,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>bigint</tt> value representing the number of non-null and non-missing items in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li>any other non-array and non-multiset input value will cause an error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">array_count( ['hello', 'world', 1, 2, 3, null, missing] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">5
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="array_avg"></a>array_avg</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">array_avg(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the average value of the non-null and non-missing numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the average of the non-null and non-missing numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if the given collection does not contain any non-null and non-missing items,</li>
<li>any other non-array and non-multiset input value will cause a type error,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">array_avg( [1.2, 2.3, 3.4, 0, null] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">1.725
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="array_sum"></a>array_sum</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">array_sum(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the sum of non-null and non-missing items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the sum of the non-null and non-missing numbers in the given collection. The returning type is decided by the item type with the highest order in the numeric type promotion order (<tt>tinyint</tt>-&gt; <tt>smallint</tt>-&gt;<tt>integer</tt>-&gt;<tt>bigint</tt>-&gt;<tt>float</tt>-&gt;<tt>double</tt>) among items.</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if the given collection does not contain any non-null and non-missing items,</li>
<li>any other non-array and non-multiset input value will cause a type error,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">array_sum( [1.2, 2.3, 3.4, 0, null, missing] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">6.9
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="array_min"></a>array_min</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">array_min(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the min value of non-null and non-missing comparable items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt>,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the min value of non-null and non-missing values in the given collection. The returning type is decided by the item type with the highest order in the type promotion order (<tt>tinyint</tt>-&gt; <tt>smallint</tt>-&gt;<tt>integer</tt>-&gt;<tt>bigint</tt>-&gt;<tt>float</tt>-&gt;<tt>double</tt>) among numeric items.</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if the given collection does not contain any non-null and non-missing items,</li>
<li>multiple incomparable items in the input array or multiset will cause a type error,</li>
<li>any other non-array and non-multiset input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">array_min( [1.2, 2.3, 3.4, 0, null, missing] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">0.0
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="array_max"></a>array_max</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">array_max(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the max value of the non-null and non-missing comparable items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt>,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the max value of non-null and non-missing numbers in the given collection. The returning type is decided by the item type with the highest order in the type promotion order (<tt>tinyint</tt>-&gt; <tt>smallint</tt>-&gt;<tt>integer</tt>-&gt;<tt>bigint</tt>-&gt;<tt>float</tt>-&gt;<tt>double</tt>) among numeric items.</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if the given collection does not contain any non-null and non-missing items,</li>
<li>multiple incomparable items in the input array or multiset will cause a type error,</li>
<li>any other non-array and non-multiset input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">array_max( [1.2, 2.3, 3.4, 0, null, missing] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">3.4
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="array_stddev_samp"></a>array_stddev_samp</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">array_stddev_samp(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the sample standard deviation value of the non-null and non-missing numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the sample standard deviation of the non-null and non-missing numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if the given collection does not contain any non-null and non-missing items,</li>
<li>any other non-array and non-multiset input value will cause a type error,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">array_stddev_samp( [1.2, 2.3, 3.4, 0, null] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">1.4591664287073858
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="array_stddev_pop"></a>array_stddev_pop</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">array_stddev_pop(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the population standard deviation value of the non-null and non-missing numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the population standard deviation of the non-null and non-missing numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if the given collection does not contain any non-null and non-missing items,</li>
<li>any other non-array and non-multiset input value will cause a type error,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">array_stddev_pop( [1.2, 2.3, 3.4, 0, null] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">1.2636751956100112
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="array_var_samp"></a>array_var_samp</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">array_var_samp(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the sample variance value of the non-null and non-missing numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the sample variance of the non-null and non-missing numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if the given collection does not contain any non-null and non-missing items,</li>
<li>any other non-array and non-multiset input value will cause a type error,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">array_var_samp( [1.2, 2.3, 3.4, 0, null] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">2.1291666666666664
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="array_var_pop"></a>array_var_pop</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">array_var_pop(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the population variance value of the non-null and non-missing numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the population variance of the non-null and non-missing numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if the given collection does not contain any non-null and non-missing items,</li>
<li>any other non-array and non-multiset input value will cause a type error,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">array_var_pop( [1.2, 2.3, 3.4, 0, null] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">1.5968749999999998
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="array_skewness"></a>array_skewness</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">array_skewness(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the skewness value of the non-null and non-missing numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the skewness of the non-null and non-missing numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if the given collection does not contain any non-null and non-missing items,</li>
<li>any other non-array and non-multiset input value will cause a type error,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">array_skewness( [1.2, 2.3, 3.4, 0, null] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">-0.04808451539164242
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="array_kurtosis"></a>array_kurtosis</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">array_kurtosis(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the kurtosis value from the normal distribution of the non-null and non-missing numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the kurtosis from a normal distribution of the non-null and non-missing numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if the given collection does not contain any non-null and non-missing items,</li>
<li>any other non-array and non-multiset input value will cause a type error,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">array_kurtosis( [1.2, 2.3, 3.4, 0, null] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">-1.342049701096427
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="strict_count"></a>strict_count</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">strict_count(collection)
</pre></div></div>
</li>
<li>

<p>Gets the number of items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing the items to be counted,</li>
<li>or a <tt>null</tt> value,</li>
<li>or a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>bigint</tt> value representing the number of items in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">strict_count( [1, 2, null, missing] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">4
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="strict_avg"></a>strict_avg</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">strict_avg(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the average value of the numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the average of the numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if there is a <tt>null</tt> or <tt>missing</tt> in the input collection,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">strict_avg( [100, 200, 300] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">200.0
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="strict_sum"></a>strict_sum</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">strict_sum(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the sum of the items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the sum of the numbers in the given collection. The returning type is decided by the item type with the highest order in the numeric type promotion order (<tt>tinyint</tt>-&gt; <tt>smallint</tt>-&gt;<tt>integer</tt>-&gt;<tt>bigint</tt>-&gt;<tt>float</tt>-&gt;<tt>double</tt>) among items.</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if there is a <tt>null</tt> or <tt>missing</tt> in the input collection,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">strict_sum( [100, 200, 300] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">600
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="strict_min"></a>strict_min</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">strict_min(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the min value of comparable items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt>,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the min value of the given collection. The returning type is decided by the item type with the highest order in the type promotion order (<tt>tinyint</tt>-&gt; <tt>smallint</tt>-&gt;<tt>integer</tt>-&gt;<tt>bigint</tt>-&gt;<tt>float</tt>-&gt;<tt>double</tt>) among numeric items.</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if there is a <tt>null</tt> or <tt>missing</tt> in the input collection,</li>
<li>multiple incomparable items in the input array or multiset will cause a type error,</li>
<li>any other non-array and non-multiset input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">strict_min( [10.2, 100, 5] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">5.0
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="strict_max"></a>strict_max</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">strict_max(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the max value of numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt>,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>The max value of the given collection. The returning type is decided by the item type with the highest order in the type promotion order (<tt>tinyint</tt>-&gt; <tt>smallint</tt>-&gt;<tt>integer</tt>-&gt;<tt>bigint</tt>-&gt;<tt>float</tt>-&gt;<tt>double</tt>) among numeric items.</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if there is a <tt>null</tt> or <tt>missing</tt> in the input collection,</li>
<li>multiple incomparable items in the input array or multiset will cause a type error,</li>
<li>any other non-array and non-multiset input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">strict_max( [10.2, 100, 5] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">100.0
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="strict_stddev_samp"></a>strict_stddev_samp</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">strict_stddev_samp(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the sample standard deviation value of the numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the sample standard deviation of the numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if there is a <tt>null</tt> or <tt>missing</tt> in the input collection,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">strict_stddev_samp( [100, 200, 300] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">100.0
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="strict_stddev_pop"></a>strict_stddev_pop</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">strict_stddev_pop(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the population standard deviation value of the numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the population standard deviation of the numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if there is a <tt>null</tt> or <tt>missing</tt> in the input collection,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">strict_stddev_pop( [100, 200, 300] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">81.64965809277261
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="strict_var_samp"></a>strict_var_samp</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">strict_var_samp(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the sample variance value of the numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the sample variance of the numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if there is a <tt>null</tt> or <tt>missing</tt> in the input collection,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">strict_var_samp( [100, 200, 300] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">10000.0
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="strict_var_pop"></a>strict_var_pop</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">strict_var_pop(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the population variance value of the numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the population variance of the numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if there is a <tt>null</tt> or <tt>missing</tt> in the input collection,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">strict_var_pop( [100, 200, 300] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">6666.666666666667
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="strict_skewness"></a>strict_skewness</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">strict_skewness(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the skewness value of the numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the skewness of the numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if there is a <tt>null</tt> or <tt>missing</tt> in the input collection,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">strict_skewness( [100, 200, 300] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">0.0
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="strict_kurtosis"></a>strict_kurtosis</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">strict_kurtosis(num_collection)
</pre></div></div>
</li>
<li>

<p>Gets the kurtosis value from the normal distribution of the numeric items in the given collection.</p>
</li>
<li>Arguments:
<ul>

<li><tt>num_collection</tt> could be:
<ul>

<li>an <tt>array</tt> or <tt>multiset</tt> containing numeric values, <tt>null</tt>s or <tt>missing</tt>s,</li>
<li>or, a <tt>null</tt> value,</li>
<li>or, a <tt>missing</tt> value.</li>
</ul>
</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>double</tt> value representing the kurtosis from a normal distribution of the numbers in the given collection,</li>
<li><tt>null</tt> is returned if the input is <tt>null</tt> or <tt>missing</tt>,</li>
<li><tt>null</tt> is returned if there is a <tt>null</tt> or <tt>missing</tt> in the input collection,</li>
<li>any other non-numeric value in the input collection will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">strict_kurtosis( [100, 200, 300] );
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">-1.5
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Comparison_Functions"></a><a name="ComparisonFunctions" id="ComparisonFunctions">Comparison Functions</a></h2>
<div class="section">
<h3><a name="greatest"></a>greatest</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">greatest(numeric_value1, numeric_value2, ...)
</pre></div></div>
</li>
<li>

<p>Computes the greatest value among arguments.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value1</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value,</li>
<li><tt>numeric_value2</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value,</li>
<li>&#x2026;.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the greatest values among arguments. The returning type is decided by the item type with the highest order in the numeric type promotion order (<tt>tinyint</tt>-&gt; <tt>smallint</tt>-&gt;<tt>integer</tt>-&gt;<tt>bigint</tt>-&gt;<tt>float</tt>-&gt;<tt>double</tt>) among items.</li>
<li><tt>null</tt> if any argument is a <tt>missing</tt> value or <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: greatest(1, 2, 3), &quot;v2&quot;: greatest(float(&quot;0.5&quot;), double(&quot;-0.5&quot;), 5000) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 3, &quot;v2&quot;: 5000.0 }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="least"></a>least</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">least(numeric_value1, numeric_value2, ...)
</pre></div></div>
</li>
<li>

<p>Computes the least value among arguments.</p>
</li>
<li>Arguments:
<ul>

<li><tt>numeric_value1</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value,</li>
<li><tt>numeric_value2</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value,</li>
<li>&#x2026;.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>the least values among arguments. The returning type is decided by the item type with the highest order in the numeric type promotion order (<tt>tinyint</tt>-&gt; <tt>smallint</tt>-&gt;<tt>integer</tt>-&gt;<tt>bigint</tt>-&gt;<tt>float</tt>-&gt;<tt>double</tt>) among items.</li>
<li><tt>null</tt> if any argument is a <tt>missing</tt> value or <tt>null</tt> value,</li>
<li>any other non-numeric input value will cause a type error.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: least(1, 2, 3), &quot;v2&quot;: least(float(&quot;0.5&quot;), double(&quot;-0.5&quot;), 5000) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 1, &quot;v2&quot;: -0.5 }
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Type_Functions"></a><a name="TypeFunctions" id="TypeFunctions">Type Functions</a></h2>
<div class="section">
<h3><a name="is_array"></a>is_array</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_array(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be an <tt>array</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is an <tt>array</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_array(true),
  &quot;b&quot;: is_array(false),
  &quot;c&quot;: isarray(null),
  &quot;d&quot;: isarray(missing),
  &quot;e&quot;: isarray(&quot;d&quot;),
  &quot;f&quot;: isarray(4.0),
  &quot;g&quot;: isarray(5),
  &quot;h&quot;: isarray([&quot;1&quot;, 2]),
  &quot;i&quot;: isarray({&quot;a&quot;:1})
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: false, &quot;f&quot;: false, &quot;g&quot;: false, &quot;h&quot;: true, &quot;i&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>isarray</tt>.</p></div>
<div class="section">
<h3><a name="is_multiset"></a>is_multiset</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_multiset(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be an <tt>multiset</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is an <tt>multiset</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_multiset(true),
  &quot;b&quot;: is_multiset(false),
  &quot;c&quot;: is_multiset(null),
  &quot;d&quot;: is_multiset(missing),
  &quot;e&quot;: is_multiset(&quot;d&quot;),
  &quot;f&quot;: ismultiset(4.0),
  &quot;g&quot;: ismultiset([&quot;1&quot;, 2]),
  &quot;h&quot;: ismultiset({&quot;a&quot;:1}),
  &quot;i&quot;: ismultiset({{&quot;hello&quot;, 9328, &quot;world&quot;, [1, 2, null]}})
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: false, &quot;f&quot;: false, &quot;g&quot;: false, &quot;h&quot;: false, &quot;i&quot;: true }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>ismultiset</tt>.</p></div>
<div class="section">
<h3><a name="is_atomic_.28is_atom.29"></a>is_atomic (is_atom)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_atomic(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a value of a <a href="../datamodel.html#PrimitiveTypes">primitive</a> type.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a primitive type or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_atomic(true),
  &quot;b&quot;: is_atomic(false),
  &quot;c&quot;: isatomic(null),
  &quot;d&quot;: isatomic(missing),
  &quot;e&quot;: isatomic(&quot;d&quot;),
  &quot;f&quot;: isatom(4.0),
  &quot;g&quot;: isatom(5),
  &quot;h&quot;: isatom([&quot;1&quot;, 2]),
  &quot;i&quot;: isatom({&quot;a&quot;:1})
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: true, &quot;b&quot;: true, &quot;c&quot;: null, &quot;e&quot;: true, &quot;f&quot;: true, &quot;g&quot;: true, &quot;h&quot;: false, &quot;i&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has three aliases: <tt>isatomic</tt>, <tt>is_atom</tt>, and <tt>isatom</tt>.</p></div>
<div class="section">
<h3><a name="is_boolean_.28is_bool.29"></a>is_boolean (is_bool)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_boolean(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>boolean</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>boolean</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: isboolean(true),
  &quot;b&quot;: isboolean(false),
  &quot;c&quot;: is_boolean(null),
  &quot;d&quot;: is_boolean(missing),
  &quot;e&quot;: isbool(&quot;d&quot;),
  &quot;f&quot;: isbool(4.0),
  &quot;g&quot;: isbool(5),
  &quot;h&quot;: isbool([&quot;1&quot;, 2]),
  &quot;i&quot;: isbool({&quot;a&quot;:1})
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: true, &quot;b&quot;: true, &quot;c&quot;: null, &quot;e&quot;: false, &quot;f&quot;: false, &quot;g&quot;: false, &quot;h&quot;: false, &quot;i&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has three aliases: <tt>isboolean</tt>, <tt>is_bool</tt>, and <tt>isbool</tt>.</p></div>
<div class="section">
<h3><a name="is_number_.28is_num.29"></a>is_number (is_num)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_number(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a numeric value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>smallint</tt>/<tt>tinyint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_number(true),
  &quot;b&quot;: is_number(false),
  &quot;c&quot;: isnumber(null),
  &quot;d&quot;: isnumber(missing),
  &quot;e&quot;: isnumber(&quot;d&quot;),
  &quot;f&quot;: isnum(4.0),
  &quot;g&quot;: isnum(5),
  &quot;h&quot;: isnum([&quot;1&quot;, 2]),
  &quot;i&quot;: isnum({&quot;a&quot;:1})
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: false, &quot;f&quot;: true, &quot;g&quot;: true, &quot;h&quot;: false, &quot;i&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has three aliases: <tt>isnumber</tt>, <tt>is_num</tt>, and <tt>isnum</tt>.</p></div>
<div class="section">
<h3><a name="is_object_.28is_obj.29"></a>is_object (is_obj)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_object(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>object</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>object</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_object(true),
  &quot;b&quot;: is_object(false),
  &quot;c&quot;: isobject(null),
  &quot;d&quot;: isobject(missing),
  &quot;e&quot;: isobj(&quot;d&quot;),
  &quot;f&quot;: isobj(4.0),
  &quot;g&quot;: isobj(5),
  &quot;h&quot;: isobj([&quot;1&quot;, 2]),
  &quot;i&quot;: isobj({&quot;a&quot;:1})
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>
<p>{ &#x201c;a&#x201d;: false, &#x201c;b&#x201d;: false, &#x201c;c&#x201d;: null, &#x201c;e&#x201d;: false, &#x201c;f&#x201d;: false, &#x201c;g&#x201d;: false, &#x201c;h&#x201d;: false, &#x201c;i&#x201d;: true }</p>
</li>
</ul>
<p>The function has three aliases: <tt>isobject</tt>, <tt>is_obj</tt>, and <tt>isobj</tt>.</p></div>
<div class="section">
<h3><a name="is_string_.28is_str.29"></a>is_string (is_str)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_string(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>string</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>string</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_string(true),
  &quot;b&quot;: isstring(false),
  &quot;c&quot;: isstring(null),
  &quot;d&quot;: isstr(missing),
  &quot;e&quot;: isstr(&quot;d&quot;),
  &quot;f&quot;: isstr(4.0),
  &quot;g&quot;: isstr(5),
  &quot;h&quot;: isstr([&quot;1&quot;, 2]),
  &quot;i&quot;: isstr({&quot;a&quot;:1})
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: true, &quot;f&quot;: false, &quot;g&quot;: false, &quot;h&quot;: false, &quot;i&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has three aliases: <tt>isstring</tt>, <tt>is_str</tt>, and <tt>isstr</tt>.</p></div>
<div class="section">
<h3><a name="is_null"></a>is_null</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_null(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>null</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the variable is a <tt>null</tt> or not,</li>
<li>a <tt>missing</tt> if the input is <tt>missing</tt>.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: is_null(null), &quot;v2&quot;: is_null(1), &quot;v3&quot;: is_null(missing) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: true, &quot;v2&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>isnull</tt>.</p></div>
<div class="section">
<h3><a name="is_missing"></a>is_missing</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_missing(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>missing</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the variable is a <tt>missing</tt> or not.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: is_missing(null), &quot;v2&quot;: is_missing(1), &quot;v3&quot;: is_missing(missing) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: false, &quot;v2&quot;: false, &quot;v3&quot;: true }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>ismissing</tt>.</p></div>
<div class="section">
<h3><a name="is_unknown"></a>is_unknown</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_unknown(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given variable is a <tt>null</tt> value or a <tt>missing</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the variable is a <tt>null</tt>/``missing<tt>value (</tt>true<tt>) or not (</tt>false`).</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: is_unknown(null), &quot;v2&quot;: is_unknown(1), &quot;v3&quot;: is_unknown(missing) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: true, &quot;v2&quot;: false, &quot;v3&quot;: true }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>isunknown</tt>.</p><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div>
<div class="section">
<h3><a name="is_binary_.28is_bin.29"></a>is_binary (is_bin)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_binary(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>binary</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>binary</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_binary(true),
  &quot;b&quot;: is_binary(false),
  &quot;c&quot;: isbinary(null),
  &quot;d&quot;: isbinary(missing),
  &quot;e&quot;: isbin(point(&quot;1,2&quot;)),
  &quot;f&quot;: isbin(hex(&quot;ABCDEF0123456789&quot;)),
  &quot;g&quot;: is_bin(sub_binary(hex(&quot;AABBCCDD&quot;), 4)),
  &quot;h&quot;: is_bin(2),
  &quot;i&quot;: is_bin({&quot;a&quot;:1})
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: false, &quot;f&quot;: true, &quot;g&quot;: true, &quot;h&quot;: false, &quot;i&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has three aliases: <tt>isbinary</tt>, <tt>is_bin</tt>, and <tt>isbin</tt>.</p></div>
<div class="section">
<h3><a name="is_uuid"></a>is_uuid</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_uuid(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>uuid</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>uuid</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source"> {
  &quot;a&quot;: is_uuid(true),
  &quot;b&quot;: is_uuid(false),
  &quot;c&quot;: is_uuid(null),
  &quot;d&quot;: is_uuid(missing),
  &quot;e&quot;: isuuid(4.0),
  &quot;f&quot;: isuuid(date(&quot;2013-01-01&quot;)),
  &quot;g&quot;: isuuid(uuid(&quot;5c848e5c-6b6a-498f-8452-8847a2957421&quot;))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: false, &quot;f&quot;: false, &quot;g&quot;: true }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>isuuid</tt>.</p></div>
<div class="section">
<h3><a name="is_point"></a>is_point</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_point(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>point</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>point</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_point(true),
  &quot;b&quot;: is_point(false),
  &quot;c&quot;: is_point(null),
  &quot;d&quot;: is_point(missing),
  &quot;e&quot;: is_point(point(&quot;1,2&quot;)),
  &quot;f&quot;: ispoint(line(&quot;30.0,70.0 50.0,90.0&quot;)),
  &quot;g&quot;: ispoint(rectangle(&quot;30.0,70.0 50.0,90.0&quot;)),
  &quot;h&quot;: ispoint(circle(&quot;30.0,70.0 5.0&quot;)),
  &quot;i&quot;: ispoint(polygon(&quot;1.0,1.0 2.0,2.0 3.0,3.0 4.0,4.0&quot;)),
  &quot;j&quot;: ispoint(3)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: true, &quot;f&quot;: false, &quot;g&quot;: false, &quot;h&quot;: false, &quot;i&quot;: false, &quot;j&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>ispoint</tt>.</p></div>
<div class="section">
<h3><a name="is_line"></a>is_line</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_line(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>line</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>line</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_line(true),
  &quot;b&quot;: is_line(false),
  &quot;c&quot;: is_line(null),
  &quot;d&quot;: is_line(missing),
  &quot;e&quot;: is_line(point(&quot;1,2&quot;)),
  &quot;f&quot;: isline(line(&quot;30.0,70.0 50.0,90.0&quot;)),
  &quot;g&quot;: isline(rectangle(&quot;30.0,70.0 50.0,90.0&quot;)),
  &quot;h&quot;: isline(circle(&quot;30.0,70.0 5.0&quot;)),
  &quot;i&quot;: isline(polygon(&quot;1.0,1.0 2.0,2.0 3.0,3.0 4.0,4.0&quot;)),
  &quot;j&quot;: isline(3)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: false, &quot;f&quot;: true, &quot;g&quot;: false, &quot;h&quot;: false, &quot;i&quot;: false, &quot;j&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>isline</tt>.</p></div>
<div class="section">
<h3><a name="is_rectangle"></a>is_rectangle</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_rectangle(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>rectangle</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>rectangle</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_rectangle(true),
  &quot;b&quot;: is_rectangle(false),
  &quot;c&quot;: is_rectangle(null),
  &quot;d&quot;: is_rectangle(missing),
  &quot;e&quot;: is_rectangle(point(&quot;1,2&quot;)),
  &quot;f&quot;: isrectangle(line(&quot;30.0,70.0 50.0,90.0&quot;)),
  &quot;g&quot;: isrectangle(rectangle(&quot;30.0,70.0 50.0,90.0&quot;)),
  &quot;h&quot;: isrectangle(circle(&quot;30.0,70.0 5.0&quot;)),
  &quot;i&quot;: isrectangle(polygon(&quot;1.0,1.0 2.0,2.0 3.0,3.0 4.0,4.0&quot;)),
  &quot;j&quot;: isrectangle(3)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: false, &quot;f&quot;: false, &quot;g&quot;: true, &quot;h&quot;: false, &quot;i&quot;: false, &quot;j&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>isrectangle</tt>.</p></div>
<div class="section">
<h3><a name="is_circle"></a>is_circle</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_circle(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>circle</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>circle</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_circle(true),
  &quot;b&quot;: is_circle(false),
  &quot;c&quot;: is_circle(null),
  &quot;d&quot;: is_circle(missing),
  &quot;e&quot;: is_circle(point(&quot;1,2&quot;)),
  &quot;f&quot;: iscircle(line(&quot;30.0,70.0 50.0,90.0&quot;)),
  &quot;g&quot;: iscircle(rectangle(&quot;30.0,70.0 50.0,90.0&quot;)),
  &quot;h&quot;: iscircle(circle(&quot;30.0,70.0 5.0&quot;)),
  &quot;i&quot;: iscircle(polygon(&quot;1.0,1.0 2.0,2.0 3.0,3.0 4.0,4.0&quot;)),
  &quot;j&quot;: iscircle(3)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: false, &quot;f&quot;: false, &quot;g&quot;: false, &quot;h&quot;: true, &quot;i&quot;: false, &quot;j&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>iscircle</tt>.</p></div>
<div class="section">
<h3><a name="is_polygon"></a>is_polygon</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_polygon(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>polygon</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>polygon</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_polygon(true),
  &quot;b&quot;: is_polygon(false),
  &quot;c&quot;: is_polygon(null),
  &quot;d&quot;: is_polygon(missing),
  &quot;e&quot;: is_polygon(point(&quot;1,2&quot;)),
  &quot;f&quot;: ispolygon(line(&quot;30.0,70.0 50.0,90.0&quot;)),
  &quot;g&quot;: ispolygon(rectangle(&quot;30.0,70.0 50.0,90.0&quot;)),
  &quot;h&quot;: ispolygon(circle(&quot;30.0,70.0 5.0&quot;)),
  &quot;i&quot;: ispolygon(polygon(&quot;1.0,1.0 2.0,2.0 3.0,3.0 4.0,4.0&quot;)),
  &quot;j&quot;: ispolygon(3)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: false, &quot;f&quot;: false, &quot;g&quot;: false, &quot;h&quot;: false, &quot;i&quot;: true, &quot;j&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>ispolygon</tt>.</p></div>
<div class="section">
<h3><a name="is_spatial"></a>is_spatial</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_spatial(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a spatial value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>point</tt>/<tt>line</tt>/<tt>rectangle</tt>/<tt>circle</tt>/<tt>polygon</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_spatial(true),
  &quot;b&quot;: is_spatial(false),
  &quot;c&quot;: is_spatial(null),
  &quot;d&quot;: is_spatial(missing),
  &quot;e&quot;: is_spatial(point(&quot;1,2&quot;)),
  &quot;f&quot;: isspatial(line(&quot;30.0,70.0 50.0,90.0&quot;)),
  &quot;g&quot;: isspatial(rectangle(&quot;30.0,70.0 50.0,90.0&quot;)),
  &quot;h&quot;: isspatial(circle(&quot;30.0,70.0 5.0&quot;)),
  &quot;i&quot;: isspatial(polygon(&quot;1.0,1.0 2.0,2.0 3.0,3.0 4.0,4.0&quot;)),
  &quot;j&quot;: isspatial(3)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: true, &quot;f&quot;: true, &quot;g&quot;: true, &quot;h&quot;: true, &quot;i&quot;: true, &quot;j&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>isspatial</tt>.</p></div>
<div class="section">
<h3><a name="is_date"></a>is_date</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_date(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>date</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>date</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_date(true),
  &quot;b&quot;: is_date(false),
  &quot;c&quot;: is_date(null),
  &quot;d&quot;: is_date(missing),
  &quot;e&quot;: is_date(date(&quot;-19700101&quot;)),
  &quot;f&quot;: isdate(date(&quot;2013-01-01&quot;)),
  &quot;g&quot;: isdate(time(&quot;12:12:12.039Z&quot;)),
  &quot;h&quot;: isdate(datetime(&quot;2013-01-01T12:12:12.039Z&quot;)),
  &quot;i&quot;: isdate(duration(&quot;P100Y12MT12M&quot;)),
  &quot;j&quot;: isdate(interval(date(&quot;2013-01-01&quot;), date(&quot;20130505&quot;))),
  &quot;k&quot;: isdate(3)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: true, &quot;f&quot;: true, &quot;g&quot;: false, &quot;h&quot;: false, &quot;i&quot;: false, &quot;j&quot;: false, &quot;k&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>isdate</tt>.</p></div>
<div class="section">
<h3><a name="is_datetime_.28is_timestamp.29"></a>is_datetime (is_timestamp)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_datetime(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>datetime</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>datetime</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: is_datetime(true),
  &quot;b&quot;: is_datetime(false),
  &quot;c&quot;: is_datetime(null),
  &quot;d&quot;: is_datetime(missing),
  &quot;e&quot;: is_datetime(datetime(&quot;2016-02-02T12:09:22.023Z&quot;)),
  &quot;f&quot;: isdatetime(datetime(&quot;2011-03-03T12:10:42.011Z&quot;)),
  &quot;g&quot;: isdatetime(time(&quot;12:12:12.039Z&quot;)),
  &quot;h&quot;: is_timestamp(datetime(&quot;2013-01-01T12:12:12.039Z&quot;)),
  &quot;i&quot;: is_timestamp(duration(&quot;P100Y12MT12M&quot;)),
  &quot;j&quot;: istimestamp(interval(date(&quot;2013-01-01&quot;), date(&quot;20130505&quot;))),
  &quot;k&quot;: istimestamp(3)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: true, &quot;f&quot;: true, &quot;g&quot;: false, &quot;h&quot;: true, &quot;i&quot;: false, &quot;j&quot;: false, &quot;k&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has three aliases: <tt>isdatetime</tt>, <tt>is_timestamp</tt>, and <tt>istimestamp</tt>.</p></div>
<div class="section">
<h3><a name="is_time"></a>is_time</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_time(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>time</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>time</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source"> {
  &quot;a&quot;: is_time(true),
  &quot;b&quot;: is_time(false),
  &quot;c&quot;: is_time(null),
  &quot;d&quot;: is_time(missing),
  &quot;e&quot;: is_time(time(&quot;08:00:00.000Z&quot;)),
  &quot;f&quot;: istime(date(&quot;2013-01-01&quot;)),
  &quot;g&quot;: istime(time(&quot;12:12:12.039Z&quot;)),
  &quot;h&quot;: istime(datetime(&quot;2013-01-01T12:12:12.039Z&quot;)),
  &quot;i&quot;: istime(duration(&quot;P100Y12MT12M&quot;)),
  &quot;j&quot;: istime(interval(date(&quot;2013-01-01&quot;), date(&quot;20130505&quot;))),
  &quot;k&quot;: istime(3)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: true, &quot;f&quot;: false, &quot;g&quot;: true, &quot;h&quot;: false, &quot;i&quot;: false, &quot;j&quot;: false, &quot;k&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>istime</tt>.</p></div>
<div class="section">
<h3><a name="is_duration"></a>is_duration</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_duration(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a duration value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>duration/year_month_duration/day_time_duration</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source"> {
  &quot;a&quot;: is_duration(true),
  &quot;b&quot;: is_duration(false),
  &quot;c&quot;: is_duration(null),
  &quot;d&quot;: is_duration(missing),
  &quot;e&quot;: is_duration(duration(&quot;-PT20.943S&quot;)),
  &quot;f&quot;: isduration(date(&quot;2013-01-01&quot;)),
  &quot;g&quot;: isduration(time(&quot;12:12:12.039Z&quot;)),
  &quot;h&quot;: isduration(datetime(&quot;2013-01-01T12:12:12.039Z&quot;)),
  &quot;i&quot;: isduration(duration(&quot;P100Y12MT12M&quot;)),
  &quot;j&quot;: isduration(interval(date(&quot;2013-01-01&quot;), date(&quot;20130505&quot;))),
  &quot;k&quot;: isduration(3)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: true, &quot;f&quot;: false, &quot;g&quot;: false, &quot;h&quot;: false, &quot;i&quot;: true, &quot;j&quot;: false, &quot;k&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>isduration</tt>.</p></div>
<div class="section">
<h3><a name="is_interval"></a>is_interval</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_interval(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a <tt>interval</tt> value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>interval</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source"> {
  &quot;a&quot;: is_interval(true),
  &quot;b&quot;: is_interval(false),
  &quot;c&quot;: is_interval(null),
  &quot;d&quot;: is_interval(missing),
  &quot;e&quot;: is_interval(interval(datetime(&quot;2013-01-01T00:01:01.000Z&quot;), datetime(&quot;2013-05-05T13:39:01.049Z&quot;))),
  &quot;f&quot;: isinterval(date(&quot;2013-01-01&quot;)),
  &quot;g&quot;: isinterval(time(&quot;12:12:12.039Z&quot;)),
  &quot;h&quot;: isinterval(datetime(&quot;2013-01-01T12:12:12.039Z&quot;)),
  &quot;i&quot;: isinterval(duration(&quot;P100Y12MT12M&quot;)),
  &quot;j&quot;: isinterval(interval(date(&quot;2013-01-01&quot;), date(&quot;20130505&quot;))),
  &quot;k&quot;: isinterval(3)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: true, &quot;f&quot;: false, &quot;g&quot;: false, &quot;h&quot;: false, &quot;i&quot;: false, &quot;j&quot;: true, &quot;k&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>isinterval</tt>.</p></div>
<div class="section">
<h3><a name="is_temporal"></a>is_temporal</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">is_temporal(expr)
</pre></div></div>
</li>
<li>

<p>Checks whether the given expression is evaluated to be a temporal value.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt> on whether the argument is a <tt>date/datetime/time/duration/year_month_duration/day_time_duration/interval</tt> value or not,</li>
<li>a <tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li>a <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source"> {
  &quot;a&quot;: is_temporal(true),
  &quot;b&quot;: is_temporal(false),
  &quot;c&quot;: is_temporal(null),
  &quot;d&quot;: is_temporal(missing),
  &quot;e&quot;: is_temporal(duration(&quot;-PT20.943S&quot;)),
  &quot;f&quot;: istemporal(date(&quot;2013-01-01&quot;)),
  &quot;g&quot;: istemporal(time(&quot;12:12:12.039Z&quot;)),
  &quot;h&quot;: istemporal(datetime(&quot;2013-01-01T12:12:12.039Z&quot;)),
  &quot;i&quot;: istemporal(duration(&quot;P100Y12MT12M&quot;)),
  &quot;j&quot;: istemporal(interval(date(&quot;2013-01-01&quot;), date(&quot;20130505&quot;))),
  &quot;k&quot;: istemporal(3)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: false, &quot;b&quot;: false, &quot;c&quot;: null, &quot;e&quot;: true, &quot;f&quot;: true, &quot;g&quot;: true, &quot;h&quot;: true, &quot;i&quot;: true, &quot;j&quot;: true, &quot;k&quot;: false }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>istemporal</tt>.</p></div>
<div class="section">
<h3><a name="get_type"></a>get_type</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">get_type(expr)
</pre></div></div>
</li>
<li>

<p>Returns a string describing the type of the given <tt>expr</tt>. This includes incomplete information types (i.e. <tt>missing</tt> and <tt>null</tt>).</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;a&quot;: get_type(true),
  &quot;b&quot;: get_type(false),
  &quot;c&quot;: get_type(null),
  &quot;d&quot;: get_type(missing),
  &quot;e&quot;: get_type(&quot;d&quot;),
  &quot;f&quot;: gettype(4.0),
  &quot;g&quot;: gettype(5),
  &quot;h&quot;: gettype([&quot;1&quot;, 2]),
  &quot;i&quot;: gettype({&quot;a&quot;:1})
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: &quot;boolean&quot;, &quot;b&quot;: &quot;boolean&quot;, &quot;c&quot;: &quot;null&quot;, &quot;d&quot;: &quot;missing&quot;, &quot;e&quot;: &quot;string&quot;, &quot;f&quot;: &quot;double&quot;, &quot;g&quot;: &quot;bigint&quot;, &quot;h&quot;: &quot;array&quot;, &quot;i&quot;: &quot;object&quot; }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>gettype</tt>.</p><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div>
<div class="section">
<h3><a name="to_array"></a>to_array</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">to_array(expr)
</pre></div></div>
</li>
<li>

<p>Converts input value to an <tt>array</tt> value</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>if the argument is <tt>missing</tt> then <tt>missing</tt> is returned</li>
<li>if the argument is <tt>null</tt> then <tt>null</tt> is returned</li>
<li>if the argument is of <tt>array</tt> type then it is returned as is</li>
<li>if the argument is of <tt>multiset</tt> type then it is returned as an <tt>array</tt> with elements in an undefined order</li>
<li>otherwise an <tt>array</tt> containing the input expression as its single item is returned</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: to_array(&quot;asterix&quot;),
  &quot;v2&quot;: to_array([&quot;asterix&quot;]),
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: [&quot;asterix&quot;], &quot;v2&quot;: [&quot;asterix&quot;] }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>toarray</tt>.</p></div>
<div class="section">
<h3><a name="to_atomic_.28to_atom.29"></a>to_atomic (to_atom)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">to_atomic(expr)
</pre></div></div>
</li>
<li>

<p>Converts input value to a <a href="../datamodel.html#PrimitiveTypes">primitive</a> value</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>if the argument is <tt>missing</tt> then <tt>missing</tt> is returned</li>
<li>if the argument is <tt>null</tt> then <tt>null</tt> is returned</li>
<li>if the argument is of primitive type then it is returned as is</li>
<li>if the argument is of <tt>array</tt> or <tt>multiset</tt> type and has only one element then the result of invoking to_atomic() on that element is returned</li>
<li>if the argument is of <tt>object</tt> type and has only one field then the result of invoking to_atomic() on the value of that field is returned</li>
<li>otherwise <tt>null</tt> is returned</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: to_atomic(&quot;asterix&quot;),
  &quot;v2&quot;: to_atomic([&quot;asterix&quot;]),
  &quot;v3&quot;: to_atomic([0, 1]),
  &quot;v4&quot;: to_atomic({&quot;value&quot;: &quot;asterix&quot;}),
  &quot;v5&quot;: to_number({&quot;x&quot;: 1, &quot;y&quot;: 2})
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: &quot;asterix&quot;, &quot;v2&quot;: &quot;asterix&quot;, &quot;v3&quot;: null, &quot;v4&quot;: &quot;asterix&quot;, &quot;v5&quot;: null }
</pre></div></div>
</li>
</ul>
<p>The function has three aliases: <tt>toatomic</tt>, <tt>to_atom</tt>, and <tt>toatom</tt>.</p></div>
<div class="section">
<h3><a name="to_boolean_.28to_bool.29"></a>to_boolean (to_bool)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">to_boolean(expr)
</pre></div></div>
</li>
<li>

<p>Converts input value to a <tt>boolean</tt> value</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>if the argument is <tt>missing</tt> then <tt>missing</tt> is returned</li>
<li>if the argument is <tt>null</tt> then <tt>null</tt> is returned</li>
<li>if the argument is of <tt>boolean</tt> type then it is returned as is</li>
<li>if the argument is of numeric type then <tt>false</tt> is returned if it is <tt>0</tt> or <tt>NaN</tt>, otherwise <tt>true</tt></li>
<li>if the argument is of <tt>string</tt> type then <tt>false</tt> is returned if it&#x2019;s empty, otherwise <tt>true</tt></li>
<li>if the argument is of <tt>array</tt> or <tt>multiset</tt> type then <tt>false</tt> is returned if it&#x2019;s size is <tt>0</tt>, otherwise <tt>true</tt></li>
<li>if the argument is of <tt>object</tt> type then <tt>false</tt> is returned if it has no fields, otherwise <tt>true</tt></li>
<li>type error is raised for all other input types</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: to_boolean(0),
  &quot;v2&quot;: to_boolean(1),
  &quot;v3&quot;: to_boolean(&quot;&quot;),
  &quot;v4&quot;: to_boolean(&quot;asterix&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: false, &quot;v2&quot;: true, &quot;v3&quot;: false, &quot;v4&quot;: true }
</pre></div></div>
</li>
</ul>
<p>The function has three aliases: <tt>toboolean</tt>, <tt>to_bool</tt>, and <tt>tobool</tt>.</p></div>
<div class="section">
<h3><a name="to_bigint"></a>to_bigint</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">to_bigint(expr)
</pre></div></div>
</li>
<li>

<p>Converts input value to an integer value</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>if the argument is <tt>missing</tt> then <tt>missing</tt> is returned</li>
<li>if the argument is <tt>null</tt> then <tt>null</tt> is returned</li>
<li>if the argument is of <tt>boolean</tt> type then <tt>1</tt> is returned if it is <tt>true</tt>, <tt>0</tt> if it is <tt>false</tt></li>
<li>if the argument is of numeric integer type then it is returned as the same value of <tt>bigint</tt> type</li>
<li>if the argument is of numeric <tt>float</tt>/<tt>double</tt> type then it is converted to <tt>bigint</tt> type</li>
<li>if the argument is of <tt>string</tt> type and can be parsed as integer then that integer value is returned, otherwise <tt>null</tt> is returned</li>
<li>if the argument is of <tt>array</tt>/<tt>multiset</tt>/<tt>object</tt> type then <tt>null</tt> is returned</li>
<li>type error is raised for all other input types</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: to_bigint(false),
  &quot;v2&quot;: to_bigint(true),
  &quot;v3&quot;: to_bigint(10),
  &quot;v4&quot;: to_bigint(float(&quot;1e100&quot;)),
  &quot;v5&quot;: to_bigint(double(&quot;1e1000&quot;)),
  &quot;v6&quot;: to_bigint(&quot;20&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 0, &quot;v2&quot;: 1, &quot;v3&quot;: 10, &quot;v4&quot;: 9223372036854775807, &quot;v5&quot;: 9223372036854775807, &quot;v6&quot;: 20 }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>tobigint</tt>.</p></div>
<div class="section">
<h3><a name="to_double"></a>to_double</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">to_double(expr)
</pre></div></div>
</li>
<li>

<p>Converts input value to a <tt>double</tt> value</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>if the argument is <tt>missing</tt> then <tt>missing</tt> is returned</li>
<li>if the argument is <tt>null</tt> then <tt>null</tt> is returned</li>
<li>if the argument is of <tt>boolean</tt> type then <tt>1.0</tt> is returned if it is <tt>true</tt>, <tt>0.0</tt> if it is <tt>false</tt></li>
<li>if the argument is of numeric type then it is returned as the value of <tt>double</tt> type</li>
<li>if the argument is of <tt>string</tt> type and can be parsed as <tt>double</tt> then that <tt>double</tt> value is returned, otherwise <tt>null</tt> is returned</li>
<li>if the argument is of <tt>array</tt>/<tt>multiset</tt>/<tt>object</tt> type then <tt>null</tt> is returned</li>
<li>type error is raised for all other input types</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: to_double(false),
  &quot;v2&quot;: to_double(true),
  &quot;v3&quot;: to_double(10),
  &quot;v4&quot;: to_double(11.5),
  &quot;v5&quot;: to_double(&quot;12.5&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 0.0, &quot;v2&quot;: 1.0, &quot;v3&quot;: 10.0, &quot;v4&quot;: 11.5, &quot;v5&quot;: 12.5 }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>todouble</tt>.</p></div>
<div class="section">
<h3><a name="to_number_.28to_num.29"></a>to_number (to_num)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">to_number(expr)
</pre></div></div>
</li>
<li>

<p>Converts input value to a numeric value</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>if the argument is <tt>missing</tt> then <tt>missing</tt> is returned</li>
<li>if the argument is <tt>null</tt> then <tt>null</tt> is returned</li>
<li>if the argument is of numeric type then it is returned as is</li>
<li>if the argument is of <tt>boolean</tt> type then <tt>1</tt> is returned if it is <tt>true</tt>, <tt>0</tt> if it is <tt>false</tt></li>
<li>if the argument is of <tt>string</tt> type and can be parsed as <tt>bigint</tt> then that <tt>bigint</tt> value is returned, otherwise if it can be parsed as <tt>double</tt> then that <tt>double</tt> value is returned, otherwise <tt>null</tt> is returned</li>
<li>if the argument is of <tt>array</tt>/<tt>multiset</tt>/<tt>object</tt> type then <tt>null</tt> is returned</li>
<li>type error is raised for all other input types</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: to_number(false),
  &quot;v2&quot;: to_number(true),
  &quot;v3&quot;: to_number(10),
  &quot;v4&quot;: to_number(11.5),
  &quot;v5&quot;: to_number(&quot;12.5&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: 0, &quot;v2&quot;: 1, &quot;v3&quot;: 10, &quot;v4&quot;: 11.5, &quot;v5&quot;: 12.5 }
</pre></div></div>
</li>
</ul>
<p>The function has three aliases: <tt>tonumber</tt>, <tt>to_num</tt>, and <tt>tonum</tt>.</p></div>
<div class="section">
<h3><a name="to_object_.28to_obj.29"></a>to_object (to_obj)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">to_object(expr)
</pre></div></div>
</li>
<li>

<p>Converts input value to an <tt>object</tt> value</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>if the argument is <tt>missing</tt> then <tt>missing</tt> is returned</li>
<li>if the argument is <tt>null</tt> then <tt>null</tt> is returned</li>
<li>if the argument is of <tt>object</tt> type then it is returned as is</li>
<li>otherwise an empty <tt>object</tt> is returned</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: to_object({&quot;value&quot;: &quot;asterix&quot;}),
  &quot;v2&quot;: to_object(&quot;asterix&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: {&quot;value&quot;: &quot;asterix&quot;}, &quot;v2&quot;: {} }
</pre></div></div>
</li>
</ul>
<p>The function has three aliases: <tt>toobject</tt>, <tt>to_obj</tt>, and <tt>toobj</tt>.</p></div>
<div class="section">
<h3><a name="to_string_.28to_str.29"></a>to_string (to_str)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">to_string(expr)
</pre></div></div>
</li>
<li>

<p>Converts input value to a string value</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>if the argument is <tt>missing</tt> then <tt>missing</tt> is returned</li>
<li>if the argument is <tt>null</tt> then <tt>null</tt> is returned</li>
<li>if the argument is of <tt>boolean</tt> type then <tt>&quot;true&quot;</tt> is returned if it is <tt>true</tt>, <tt>&quot;false&quot;</tt> if it is <tt>false</tt></li>
<li>if the argument is of numeric type then its string representation is returned</li>
<li>if the argument is of <tt>string</tt> type then it is returned as is</li>
<li>if the argument is of <tt>array</tt>/<tt>multiset</tt>/<tt>object</tt> type then <tt>null</tt> is returned</li>
<li>type error is raised for all other input types</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: to_string(false),
  &quot;v2&quot;: to_string(true),
  &quot;v3&quot;: to_string(10),
  &quot;v4&quot;: to_string(11.5),
  &quot;v5&quot;: to_string(&quot;asterix&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: &quot;false&quot;, &quot;v2&quot;: &quot;true&quot;, &quot;v3&quot;: &quot;10&quot;, &quot;v4&quot;: &quot;11.5&quot;, &quot;v5&quot;: &quot;asterix&quot; }
</pre></div></div>
</li>
</ul>
<p>The function has three aliases: <tt>tostring</tt>, <tt>to_str</tt>, and <tt>tostr</tt>.</p><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Conditional_Functions"></a><a name="ConditionalFunctions" id="ConditionalFunctions">Conditional Functions</a></h2>
<div class="section">
<h3><a name="if_null_.28ifnull.29"></a>if_null (ifnull)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">if_null(expression1, expression2, ... expressionN)
</pre></div></div>
</li>
<li>

<p>Finds first argument which value is not <tt>null</tt> and returns that value</p>
</li>
<li>Arguments:
<ul>

<li><tt>expressionI</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>null</tt> if all arguments evaluate to <tt>null</tt> or no arguments specified</li>
<li>a value of the first non-<tt>null</tt> argument otherwise</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
    &quot;a&quot;: if_null(),
    &quot;b&quot;: if_null(null),
    &quot;c&quot;: if_null(null, &quot;asterixdb&quot;),
    &quot;d&quot;: is_missing(if_null(missing))
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: null, &quot;b&quot;: null, &quot;c&quot;: &quot;asterixdb&quot;, &quot;d&quot;: true }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>ifnull</tt>.</p></div>
<div class="section">
<h3><a name="if_missing_.28ifmissing.29"></a>if_missing (ifmissing)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">if_missing(expression1, expression2, ... expressionN)
</pre></div></div>
</li>
<li>

<p>Finds first argument which value is not <tt>missing</tt> and returns that value</p>
</li>
<li>Arguments:
<ul>

<li><tt>expressionI</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>null</tt> if all arguments evaluate to <tt>missing</tt> or no arguments specified</li>
<li>a value of the first non-<tt>missing</tt> argument otherwise</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
    &quot;a&quot;: if_missing(),
    &quot;b&quot;: if_missing(missing),
    &quot;c&quot;: if_missing(missing, &quot;asterixdb&quot;),
    &quot;d&quot;: if_missing(null, &quot;asterixdb&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: null, &quot;b&quot;: null, &quot;c&quot;: &quot;asterixdb&quot;, &quot;d&quot;: null }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>ifmissing</tt>.</p></div>
<div class="section">
<h3><a name="if_missing_or_null_.28ifmissingornull.2C_coalesce.29"></a>if_missing_or_null (ifmissingornull, coalesce)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">if_missing_or_null(expression1, expression2, ... expressionN)
</pre></div></div>
</li>
<li>

<p>Finds first argument which value is not <tt>null</tt> or <tt>missing</tt> and returns that value</p>
</li>
<li>Arguments:
<ul>

<li><tt>expressionI</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>null</tt> if all arguments evaluate to either <tt>null</tt> or <tt>missing</tt>, or no arguments specified</li>
<li>a value of the first non-<tt>null</tt>, non-<tt>missing</tt> argument otherwise</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
    &quot;a&quot;: if_missing_or_null(),
    &quot;b&quot;: if_missing_or_null(null, missing),
    &quot;c&quot;: if_missing_or_null(null, missing, &quot;asterixdb&quot;)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: null, &quot;b&quot;: null, &quot;c&quot;: &quot;asterixdb&quot; }
</pre></div></div>
</li>
</ul>
<p>The function has two aliases: <tt>ifmissingornull</tt> and <tt>coalesce</tt>.</p></div>
<div class="section">
<h3><a name="if_inf_.28ifinf.29"></a>if_inf (ifinf)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">if_inf(expression1, expression2, ... expressionN)
</pre></div></div>
</li>
<li>

<p>Finds first argument which is a non-infinite (<tt>INF</tt> or<tt>-INF</tt>) number</p>
</li>
<li>Arguments:
<ul>

<li><tt>expressionI</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>missing</tt> if <tt>missing</tt> argument was encountered before the first non-infinite number argument</li>
<li>a <tt>null</tt> if <tt>null</tt> argument or any other non-number argument was encountered before the first non-infinite number argument</li>
<li>the first non-infinite number argument otherwise</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
    &quot;a&quot;: is_null(if_inf(null)),
    &quot;b&quot;: is_missing(if_inf(missing)),
    &quot;c&quot;: is_null(if_inf(double(&quot;INF&quot;))),
    &quot;d&quot;: if_inf(1, null, missing) ],
    &quot;e&quot;: is_null(if_inf(null, missing, 1)) ],
    &quot;f&quot;: is_missing(if_inf(missing, null, 1)) ],
    &quot;g&quot;: if_inf(float(&quot;INF&quot;), 1) ],
    &quot;h&quot;: to_string(if_inf(float(&quot;INF&quot;), double(&quot;NaN&quot;), 1)) ]
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: true, &quot;b&quot;: true, &quot;c&quot;: true, &quot;d&quot;: 1, &quot;e&quot;: true, &quot;f&quot;: true, &quot;g&quot;: 1, &quot;h&quot;: &quot;NaN&quot; }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>ifinf</tt>.</p></div>
<div class="section">
<h3><a name="if_nan_.28ifnan.29"></a>if_nan (ifnan)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">if_nan(expression1, expression2, ... expressionN)
</pre></div></div>
</li>
<li>

<p>Finds first argument which is a non-<tt>NaN</tt> number</p>
</li>
<li>Arguments:
<ul>

<li><tt>expressionI</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>missing</tt> if <tt>missing</tt> argument was encountered before the first non-<tt>NaN</tt> number argument</li>
<li>a <tt>null</tt> if <tt>null</tt> argument or any other non-number argument was encountered before the first non-<tt>NaN</tt> number argument</li>
<li>the first non-<tt>NaN</tt> number argument otherwise</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
    &quot;a&quot;: is_null(if_nan(null)),
    &quot;b&quot;: is_missing(if_nan(missing)),
    &quot;c&quot;: is_null(if_nan(double(&quot;NaN&quot;))),
    &quot;d&quot;: if_nan(1, null, missing) ],
    &quot;e&quot;: is_null(if_nan(null, missing, 1)) ],
    &quot;f&quot;: is_missing(if_nan(missing, null, 1)) ],
    &quot;g&quot;: if_nan(float(&quot;NaN&quot;), 1) ],
    &quot;h&quot;: to_string(if_nan(float(&quot;NaN&quot;), double(&quot;INF&quot;), 1)) ]
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: true, &quot;b&quot;: true, &quot;c&quot;: true, &quot;d&quot;: 1, &quot;e&quot;: true, &quot;f&quot;: true, &quot;g&quot;: 1, &quot;h&quot;: &quot;INF&quot; }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>ifnan</tt>.</p></div>
<div class="section">
<h3><a name="if_nan_or_inf_.28ifnanorinf.29"></a>if_nan_or_inf (ifnanorinf)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">if_nan_or_inf(expression1, expression2, ... expressionN)
</pre></div></div>
</li>
<li>

<p>Finds first argument which is a non-infinite (<tt>INF</tt> or<tt>-INF</tt>) and non-<tt>NaN</tt> number</p>
</li>
<li>Arguments:
<ul>

<li><tt>expressionI</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>missing</tt> if <tt>missing</tt> argument was encountered before the first non-infinite and non-<tt>NaN</tt> number argument</li>
<li>a <tt>null</tt> if <tt>null</tt> argument or any other non-number argument was encountered before the first non-infinite and non-<tt>NaN</tt> number argument</li>
<li>the first non-infinite and non-<tt>NaN</tt> number argument otherwise</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
    &quot;a&quot;: is_null(if_nan_or_inf(null)),
    &quot;b&quot;: is_missing(if_nan_or_inf(missing)),
    &quot;c&quot;: is_null(if_nan_or_inf(double(&quot;NaN&quot;), double(&quot;INF&quot;))),
    &quot;d&quot;: if_nan_or_inf(1, null, missing) ],
    &quot;e&quot;: is_null(if_nan_or_inf(null, missing, 1)) ],
    &quot;f&quot;: is_missing(if_nan_or_inf(missing, null, 1)) ],
    &quot;g&quot;: if_nan_or_inf(float(&quot;NaN&quot;), float(&quot;INF&quot;), 1) ],
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: true, &quot;b&quot;: true, &quot;c&quot;: true, &quot;d&quot;: 1, &quot;e&quot;: true, &quot;f&quot;: true, &quot;g&quot;: 1 }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>ifnanorinf</tt>.</p></div>
<div class="section">
<h3><a name="null_if_.28nullif.29"></a>null_if (nullif)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">null_if(expression1, expression2)
</pre></div></div>
</li>
<li>

<p>Compares two arguments and returns <tt>null</tt> if they are equal, otherwise returns the first argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expressionI</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if
<ul>

<li>any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value, or</li>
<li><tt>argument1</tt> = <tt>argument2</tt></li>
</ul>
</li>
<li>a value of the first argument otherwise</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
    &quot;a&quot;: null_if(&quot;asterixdb&quot;, &quot;asterixdb&quot;),
    &quot;b&quot;: null_if(1, 2)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: null, &quot;b&quot;: 1 }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>nullif</tt>.</p></div>
<div class="section">
<h3><a name="missing_if_.28missingif.29"></a>missing_if (missingif)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">missing_if(expression1, expression2)
</pre></div></div>
</li>
<li>

<p>Compares two arguments and returns <tt>missing</tt> if they are equal, otherwise returns the first argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expressionI</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li><tt>missing</tt> if
<ul>

<li>any argument is a <tt>missing</tt> value, or</li>
<li>no argument is a <tt>null</tt> value and <tt>argument1</tt> = <tt>argument2</tt></li>
</ul>
</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value</li>
<li>a value of the first argument otherwise</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
    &quot;a&quot;: missing_if(&quot;asterixdb&quot;, &quot;asterixdb&quot;)
    &quot;b&quot;: missing_if(1, 2),
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;b&quot;: 1 }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>missingif</tt>.</p></div>
<div class="section">
<h3><a name="nan_if_.28nanif.29"></a>nan_if (nanif)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">nan_if(expression1, expression2)
</pre></div></div>
</li>
<li>

<p>Compares two arguments and returns <tt>NaN</tt> value if they are equal, otherwise returns the first argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expressionI</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value</li>
<li><tt>NaN</tt> value of type <tt>double</tt> if <tt>argument1</tt> = <tt>argument2</tt></li>
<li>a value of the first argument otherwise</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
    &quot;a&quot;: to_string(nan_if(&quot;asterixdb&quot;, &quot;asterixdb&quot;)),
    &quot;b&quot;: nan_if(1, 2)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: &quot;NaN&quot;, &quot;b&quot;: 1 }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>nanif</tt>.</p></div>
<div class="section">
<h3><a name="posinf_if_.28posinfif.29"></a>posinf_if (posinfif)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">posinf_if(expression1, expression2)
</pre></div></div>
</li>
<li>

<p>Compares two arguments and returns <tt>+INF</tt> value if they are equal, otherwise returns the first argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expressionI</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value</li>
<li><tt>+INF</tt> value of type <tt>double</tt> if <tt>argument1</tt> = <tt>argument2</tt></li>
<li>a value of the first argument otherwise</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
    &quot;a&quot;: to_string(posinf_if(&quot;asterixdb&quot;, &quot;asterixdb&quot;)),
    &quot;b&quot;: posinf_if(1, 2)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: &quot;+INF&quot;, &quot;b&quot;: 1 }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>posinfif</tt>.</p></div>
<div class="section">
<h3><a name="neginf_if_.28neginfif.29"></a>neginf_if (neginfif)</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">neginf_if(expression1, expression2)
</pre></div></div>
</li>
<li>

<p>Compares two arguments and returns <tt>-INF</tt> value if they are equal, otherwise returns the first argument.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expressionI</tt> : an expression (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value</li>
<li><tt>-INF</tt> value of type <tt>double</tt> if <tt>argument1</tt> = <tt>argument2</tt></li>
<li>a value of the first argument otherwise</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
    &quot;a&quot;: to_string(neginf_if(&quot;asterixdb&quot;, &quot;asterixdb&quot;)),
    &quot;b&quot;: neginf_if(1, 2)
};
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;a&quot;: &quot;-INF&quot;, &quot;b&quot;: 1 }
</pre></div></div>
</li>
</ul>
<p>The function has an alias <tt>neginfif</tt>.</p><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Miscellaneous_Functions"></a><a name="MiscFunctions" id="MiscFunctions">Miscellaneous Functions</a></h2>
<div class="section">
<h3><a name="uuid"></a>uuid</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">uuid()
</pre></div></div>
</li>
<li>

<p>Generates a <tt>uuid</tt>.</p>
</li>
<li>Arguments:
<ul>

<li>none</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a generated, random <tt>uuid</tt>.</li>
</ul>
</li>
</ul></div>
<div class="section">
<h3><a name="len"></a>len</h3>
<ul>

<li>

<p>Syntax:</p>
<p>len(array)</p>
</li>
<li>

<p>Returns the length of the array array.</p>
</li>
<li>Arguments:
<ul>

<li><tt>array</tt> : an <tt>array</tt>, <tt>multiset</tt>, <tt>null</tt>, or <tt>missing</tt>, represents the collection that needs to be checked.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>an <tt>integer</tt> that represents the length of input array or the size of the input multiset,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">len([&quot;Hello&quot;, &quot;World&quot;])
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">2
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="not"></a>not</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">not(expr)
</pre></div></div>
</li>
<li>

<p>Inverts a <tt>boolean</tt> value</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr</tt> : an expression</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>a <tt>boolean</tt>, the inverse of <tt>expr</tt>,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value,</li>
<li>other non-boolean argument value will cause a type error.</li>
</ul>
</li>
<li>Example:

<div>
<div>
<pre class="source">{ &quot;v1&quot;: `not`(true), &quot;v2&quot;: `not`(false), &quot;v3&quot;: `not`(null), &quot;v4&quot;: `not`(missing) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;v1&quot;: false, &quot;v2&quot;: true, &quot;v3&quot;: null }
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="random"></a>random</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">random( [seed_value] )
</pre></div></div>
</li>
<li>

<p>Returns a random number, accepting an optional seed value</p>
</li>
<li>Arguments:
<ul>

<li><tt>seed_value</tt>: an optional <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt>/<tt>float</tt>/<tt>double</tt> value representing the seed number.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li>A random number of type <tt>double</tt> between 0 and 1,</li>
<li><tt>missing</tt> if the argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if the argument is a <tt>null</tt> value or a non-numeric value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">{
  &quot;v1&quot;: random(),
  &quot;v2&quot;: random(unix_time_from_datetime_in_ms(current_datetime()))
};
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="range"></a>range</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">range(start_numeric_value, end_numeric_value)
</pre></div></div>
</li>
<li>

<p>Generates a series of <tt>bigint</tt> values based start the <tt>start_numeric_value</tt> until the <tt>end_numeric_value</tt>.</p>
</li>
<li>Arguments:</li>
<li><tt>start_numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt> value representing the start value.</li>
<li><tt>end_numeric_value</tt>: a <tt>tinyint</tt>/<tt>smallint</tt>/<tt>integer</tt>/<tt>bigint</tt> value representing the max final value.</li>
<li>Return Value:
<ul>

<li>an array that starts with the integer value of <tt>start_numeric_value</tt> and ends with the integer value of <tt>end_numeric_value</tt>, where the value of each entry in the array is the integer successor of the value in the preceding entry.</li>
</ul>
</li>
<li>Example:

<div>
<div>
<pre class="source">range(0, 3);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[ 0, 1, 2, 3 ]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="switch_case"></a>switch_case</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">switch_case(
    condition,
    case1, case1_result,
    case2, case2_result,
    ...,
    default, default_result
)
</pre></div></div>
</li>
<li>

<p>Switches amongst a sequence of cases and returns the result of the first matching case. If no match is found, the result of the default case is returned.</p>
</li>
<li>Arguments:
<ul>

<li><tt>condition</tt>: a variable (any type is allowed).</li>
<li><tt>caseI/default</tt>: a variable (any type is allowed).</li>
<li><tt>caseI/default_result</tt>: a variable (any type is allowed).</li>
</ul>
</li>
<li>Return Value:
<ul>

<li><tt>caseI_result</tt> if <tt>condition</tt> matches <tt>caseI</tt>, otherwise <tt>default_result</tt>.</li>
</ul>
</li>
<li>Example 1:

<div>
<div>
<pre class="source">switch_case(
    &quot;a&quot;,
    &quot;a&quot;, 0,
    &quot;x&quot;, 1,
    &quot;y&quot;, 2,
    &quot;z&quot;, 3
);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">0
</pre></div></div>
</li>
<li>

<p>Example 2:</p>

<div>
<div>
<pre class="source">switch_case(
    &quot;a&quot;,
    &quot;x&quot;, 1,
    &quot;y&quot;, 2,
    &quot;z&quot;, 3
);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">3
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="deep_equal"></a>deep_equal</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">deep_equal(expr1, expr2)
</pre></div></div>
</li>
<li>

<p>Assess the equality between two expressions of any type (e.g., object, arrays, or multiset). Two objects are deeply equal iff both their types and values are equal.</p>
</li>
<li>Arguments:
<ul>

<li><tt>expr1</tt> : an expression,</li>
<li><tt>expr2</tt> : an expression.</li>
</ul>
</li>
<li>Return Value:
<ul>

<li><tt>true</tt> or <tt>false</tt> depending on the data equality,</li>
<li><tt>missing</tt> if any argument is a <tt>missing</tt> value,</li>
<li><tt>null</tt> if any argument is a <tt>null</tt> value but no argument is a <tt>missing</tt> value.</li>
</ul>
</li>
<li>

<p>Example:</p>

<div>
<div>
<pre class="source">deep_equal(
           {
             &quot;id&quot;:1,
             &quot;project&quot;:&quot;AsterixDB&quot;,
             &quot;address&quot;:{&quot;city&quot;:&quot;Irvine&quot;, &quot;state&quot;:&quot;CA&quot;},
             &quot;related&quot;:[&quot;Hivestrix&quot;, &quot;Preglix&quot;, &quot;Apache VXQuery&quot;]
           },
           {
             &quot;id&quot;:1,
             &quot;project&quot;:&quot;AsterixDB&quot;,
             &quot;address&quot;:{&quot;city&quot;:&quot;San Diego&quot;, &quot;state&quot;:&quot;CA&quot;},
             &quot;related&quot;:[&quot;Hivestrix&quot;, &quot;Preglix&quot;, &quot;Apache VXQuery&quot;]
           }
);
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">false
</pre></div></div>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Bitwise_Functions"></a><a name="BitwiseFunctions" id="BitwiseFunctions">Bitwise Functions</a></h2>
<p>All Bit/Binary functions can only operate on 64-bit signed integers.</p>
<p><b>Note:</b> All non-integer numbers and other data types result in null.</p>
<p><b>Note:</b> The query language uses two&#x2019;s complement representation.</p>
<p>When looking at the value in binary form, bit 1 is the Least Significant Bit (LSB) and bit 32 is the Most Significant Bit (MSB).</p>
<p>(MSB) Bit 32 &#x2192; <tt>0000 0000 0000 0000 0000 0000 0000 0000</tt> &#x2190; Bit 1 (LSB)</p>
<div class="section">
<h3><a name="bitand"></a>bitand</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">BITAND(int_value1, int_value2, ... , int_valueN)
</pre></div></div>
</li>
<li>

<p>Returns the result of a bitwise AND operation performed on all input integer values.</p>
<p>The bitwise AND operation compares each bit of <tt>int_value1</tt> to the corresponding bit of every other <tt>int_value</tt>. If all bits are 1, then the corresponding result bit is set to 1; otherwise it is set to 0 (zero).</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>int_valueI</tt>: Integers, or any valid expressions which evaluate to integers, that are used to compare.</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>An integer, representing the bitwise AND between all of the input integers.</li>
</ul>
</li>
<li>

<p>Limitations:</p>
<ul>

<li>Input values must be integers (such as 1 or 1.0) and cannot contain decimals (such as 1.2).</li>
</ul>
</li>
<li>

<p>Example 1:</p>
<p>Compare 3 (0011 in binary) and 6 (0110 in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitAND&quot;: BITAND(3,6) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitAND&quot;: 2 }
</pre></div></div>

<p>This results in 2 (0010 in binary) because only bit 2 is set in both 3 (00<b>1</b>1) and 6 (01<b>1</b>0).</p>
</li>
<li>

<p>Example 2:</p>
<p>Compare 4.5 and 3 (0011 in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitAND&quot;: BITAND(4.5,3) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitAND&quot;: null }
</pre></div></div>

<p>The result is null because 4.5 is not an integer.</p>
</li>
<li>

<p>Example 3:</p>
<p>Compare 4.0 (0100 in binary) and 3 (0011 in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitAND&quot;: BITAND(4.0,3) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitAND&quot;: 0 }
</pre></div></div>

<p>This results in 0 (zero) because 4.0 (0100) and 3 (0011) do not share any bits that are both 1.</p>
</li>
<li>

<p>Example 4:</p>
<p>Compare 3 (0011 in binary) and 6 (0110 in binary) and 15 (1111 in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitAND&quot;: BITAND(3,6,15) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitAND&quot;: 2 }
</pre></div></div>

<p>This results in 2 (0010 in binary) because only the 2nd bit from the right is 1 in all three numbers.</p>
</li>
</ul></div>
<div class="section">
<h3><a name="bitclear"></a>bitclear</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">BITCLEAR(int_value, positions)
</pre></div></div>
</li>
<li>

<p>Returns the result after clearing the specified bit, or array of bits in <tt>int_value</tt> using the given <tt>positions</tt>.</p>
<p><b>Note:</b> Specifying a negative or zero bit position makes the function return a null.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li>

<p><tt>int_value</tt>: An integer, or any valid expression which evaluates to an integer, that contains the target bit or bits to clear.</p>
</li>
<li>

<p><tt>positions</tt>: An integer or an array of integers specifying the position or positions to be cleared.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>An integer, representing the result after clearing the bit or bits specified.</li>
</ul>
</li>
<li>

<p>Limitations:</p>
<ul>

<li>Input values must be integers (such as 1 or 1.0) and cannot contain decimals (such as 1.2).</li>
</ul>
</li>
<li>

<p>Example 1:</p>
<p>Clear bit 1 from 6 (0110 in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitCLEAR&quot;: BITCLEAR(6,1) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitCLEAR&quot;: 6 }
</pre></div></div>

<p>This results in 6 (011<b>0</b> in binary) because bit 1 was already zero.</p>
</li>
<li>

<p>Example 2:</p>
<p>Clear bits 1 and 2 from 6 (01<b>10</b> in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitCLEAR&quot;: BITCLEAR(6,[1,2]) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitCLEAR&quot;: 4 }
</pre></div></div>

<p>This results in 4 (01<b>0</b>0 in binary) because bit 2 changed to zero.</p>
</li>
<li>

<p>Example 3:</p>
<p>Clear bits 1, 2, 4, and 5 from 31 (0<b>11</b>1<b>11</b> in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitCLEAR&quot;: BITCLEAR(31,[1,2,4,5]) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitCLEAR&quot;: 4 }
</pre></div></div>

<p>This results in 4 (0<b>00</b>1<b>00</b>) because bits 1, 2, 4, and 5 changed to zero.</p>
</li>
</ul></div>
<div class="section">
<h3><a name="bitnot"></a>bitnot</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">BITNOT(int_value)
</pre></div></div>
</li>
<li>

<p>Returns the results of a bitwise logical NOT operation performed on an integer value.</p>
<p>The bitwise logical NOT operation reverses the bits in the value. For each value bit that is 1, the corresponding result bit will be set to 0 (zero); and for each value bit that is 0 (zero), the corresponding result bit will be set to 1.</p>
<p><b>Note:</b> All bits of the integer will be altered by this operation.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>int_value</tt>: An integer, or any valid expression which evaluates to an integer, that contains the target bits to reverse.</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>An integer, representing the result after performing the logical NOT operation.</li>
</ul>
</li>
<li>

<p>Limitations:</p>
<ul>

<li>Input values must be integers (such as 1 or 1.0) and cannot contain decimals (such as 1.2).</li>
</ul>
</li>
<li>

<p>Example 1:</p>
<p>Perform the NOT operation on 3 (0000 0000 0000 0000 0000 0000 0000 0011 in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitNOT&quot;: BITNOT(3) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitNOT&quot;: -4 }
</pre></div></div>

<p>This results in -4 (<b>1111 1111 1111 1111 1111 1111 1111 1100</b> in binary) because all bits changed.</p>
</li>
</ul></div>
<div class="section">
<h3><a name="bitor"></a>bitor</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">BITOR(int_value1, int_value2, ... , int_valueN)
</pre></div></div>
</li>
<li>

<p>Returns the result of a bitwise inclusive OR operation performed on all input integer values.</p>
<p>The bitwise inclusive OR operation compares each bit of <tt>int_value1</tt> to the corresponding bit of every other <tt>int_value</tt>. If any bit is 1, the corresponding result bit is set to 1; otherwise, it is set to 0 (zero).</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>int_valueI</tt>: Integers, or any valid expressions which evaluate to integers, that are used to compare.</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>An integer, representing the bitwise OR between all of the input integers.</li>
</ul>
</li>
<li>

<p>Limitations:</p>
<ul>

<li>Input values must be integers (such as 1 or 1.0) and cannot contain decimals (such as 1.2).</li>
</ul>
</li>
<li>

<p>Example 1:</p>
<p>Perform OR on 3 (0011 in binary) and 6 (0110 in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitOR&quot;: BITOR(3,6) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitOR&quot;: 7 }
</pre></div></div>

<p>This results in 7 (0<b>111</b> in binary) because at least 1 bit of each (00<b>11</b> and 0<b>11</b>0) is 1 in bits 1, 2, and 3.</p>
</li>
<li>

<p>Example 2:</p>
<p>Perform OR on 3 (0011 in binary) and -4 (1000 0000 0000 &#x2026; 0000 1100 in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitOR&quot;: BITOR(3,-4) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitOR&quot;: -1 }
</pre></div></div>

<p>This results in -1 (<b>1111 1111 1111 &#x2026; 1111 1111</b> in binary) because the two 1 bits in 3 fill in the two 0 bits in -4 to turn on all the bits.</p>
</li>
<li>

<p>Example 3:</p>
<p>Perform OR on 3 (0011 in binary) and 6 (0110 in binary) and 15 (1111 in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitOR&quot;: BITOR(3,6,15) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitOR&quot;: 15 }
</pre></div></div>

<p>This results in 15 (1111 in binary) because there is at least one 1 in each of the four rightmost bits.</p>
</li>
</ul></div>
<div class="section">
<h3><a name="bitset"></a>bitset</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">BITSET(int_value, positions)
</pre></div></div>
</li>
<li>

<p>Returns the result after setting the specified bit <tt>position</tt>, or array of bit positions, to 1 in the given <tt>int_value</tt>.</p>
<p><b>Note:</b> Specifying a negative or zero position makes the function return a null.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li>

<p><tt>int_value</tt>: An integer, or any valid expression which evaluates to an integer, that contains the target bit or bits to set.</p>
</li>
<li>

<p><tt>positions</tt>: An integer or an array of integers specifying the position or positions to be set.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>An integer, representing the result after setting the bit or bits specified. If the bit is already set, then it stays set.</li>
</ul>
</li>
<li>

<p>Limitations:</p>
<ul>

<li>Input values must be integers (such as 1 or 1.0) and cannot contain decimals (such as 1.2).</li>
</ul>
</li>
<li>

<p>Example 1:</p>
<p>Set bit 1 in the value 6 (011<b>0</b> in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitSET&quot;: BITSET(6,1) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitSET&quot;: 7 }
</pre></div></div>

<p>This results in 7 (011<b>1</b> in binary) because bit 1 changed to 1.</p>
</li>
<li>

<p>Example 2:</p>
<p>Set bits 1 and 2 in the value 6 (01<b>10</b> in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitSET&quot;: BITSET(6,[1,2]) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitSET&quot;: 7 }
</pre></div></div>

<p>This also results in 7 (01<b>11</b> in binary) because bit 1 changed while bit 2 remained the same.</p>
</li>
<li>

<p>Example 3:</p>
<p>Set bits 1 and 4 in the value 6 (<b>0</b>11<b>0</b> in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitSET&quot;: BITSET(6,[1,4]) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitSET&quot;: 15 }
</pre></div></div>

<p>This results in 15 (<b>1</b>11<b>1</b> in binary) because bit 1 and 4 changed to ones.</p>
</li>
</ul></div>
<div class="section">
<h3><a name="bitshift"></a>bitshift</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">BITSHIFT(int_value, shift_amount[, rotate])
</pre></div></div>
</li>
<li>

<p>Returns the result of a bit shift operation performed on the integer value <tt>int_value</tt>. The <tt>shift_amount</tt> supports left and right shifts. These are logical shifts. The third parameter <tt>rotate</tt> supports circular shift. This is similar to the BitROTATE function in Oracle.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li>

<p><tt>int_value</tt>: An integer, or any valid expression which evaluates to an integer, that contains the target bit or bits to shift.</p>
</li>
<li>

<p><tt>shift_amount</tt>: An integer, or any valid expression which evaluates to an integer, that contains the number of bits to shift.</p>
<ul>

<li>

<p>A positive (+) number means this is a LEFT shift.</p>
</li>
<li>

<p>A negative (-) number means this is a RIGHT shift.</p>
</li>
</ul>
</li>
<li>

<p><tt>rotate</tt>: (Optional) A boolean, or any valid expression which evaluates to a boolean, where:</p>
<ul>

<li>

<p>FALSE means this is a LOGICAL shift, where bits shifted off the end of a value are considered lost.</p>
</li>
<li>

<p>TRUE means this is a CIRCULAR shift (shift-and-rotate operation), where bits shifted off the end of a value are rotated back onto the value at the <i>other</i> end. In other words, the bits rotate in what might be thought of as a circular pattern; therefore, these bits are not lost.</p>
</li>
</ul>
<p>If omitted, the default is FALSE.</p>
</li>
</ul>
<p>For comparison, see the below table.</p>
<table border="0" class="table table-striped">
<thead>

<tr class="a">
<th> Input </th>
<th> Shift </th>
<th> Result of Logical Shift (Rotate FALSE) </th>
<th> Result of Circular Shift (Rotate TRUE) </th></tr>
</thead><tbody>

<tr class="b">
<td> 6 (0000 0110)     </td>
<td> 4     </td>
<td> 96 (0110 0000)    </td>
<td> 96 (0110 0000)                                 </td></tr>
<tr class="a">
<td> 6 (0000 0110)     </td>
<td> 3     </td>
<td> 48 (0011 0000)    </td>
<td> 48 (0011 0000)                                 </td></tr>
<tr class="b">
<td> 6 (0000 0110)     </td>
<td> 2     </td>
<td> 24 (0001 1000)    </td>
<td> 24 (0001 1000)                                 </td></tr>
<tr class="a">
<td> 6 (0000 0110)     </td>
<td> 1     </td>
<td> 12 (0000 1100)    </td>
<td> 12 (0000 1100)                                 </td></tr>
<tr class="b">
<td> <b>6 (0000 0110)</b> </td>
<td> <b>0</b> </td>
<td> <b>6 (0000 0110)</b> </td>
<td> <b>6 (0000 0110)</b>                              </td></tr>
<tr class="a">
<td> 6 (0000 0110)     </td>
<td> -1    </td>
<td> 3 (0000 0011)     </td>
<td> 3 (0000 0011)                                  </td></tr>
<tr class="b">
<td> 6 (0000 0110)     </td>
<td> -2    </td>
<td> 1 (0000 0001)     </td>
<td> -9223372036854775807 (1000 0000 &#x2026; 0000 0001) </td></tr>
<tr class="a">
<td> 6 (0000 0110)     </td>
<td> -3    </td>
<td> 0 (0000 0000)     </td>
<td> -4611686018427387904 (1100 0000 &#x2026; 0000 0000) </td></tr>
<tr class="b">
<td> 6 (0000 0110)     </td>
<td> -4    </td>
<td> 0 (0000 0000)     </td>
<td> 6917529027641081856 (0110 0000 &#x2026; 0000 0000)  </td></tr>
</tbody>
</table>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>An integer, representing the result of either a logical or circular shift of the given integer.</li>
</ul>
</li>
<li>

<p>Limitations:</p>
<ul>

<li>Input values must be integers (such as 1 or 1.0) and cannot contain decimals (such as 1.2).</li>
</ul>
</li>
<li>

<p>Example 1:</p>
<p>Logical left shift of the number 6 (0110 in binary) by one bit.</p>

<div>
<div>
<pre class="source">{ &quot;BitSHIFT&quot;: BITSHIFT(6,1,FALSE) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitSHIFT&quot;: 12 }
</pre></div></div>

<p>This results in 12 (1100 in binary) because the 1-bits moved from positions 2 and 3 to positions 3 and 4.</p>
</li>
<li>

<p>Example 2:</p>
<p>Logical right shift of the number 6 (0110 in binary) by two bits.</p>

<div>
<div>
<pre class="source">{ &quot;BitSHIFT&quot;: BITSHIFT(6,-2) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitSHIFT&quot;: 1 }
</pre></div></div>

<p>This results in 1 (0001 in binary) because the 1-bit in position 3 moved to position 1 and the 1-bit in position 2 was dropped.</p>
</li>
<li>

<p>Example 2b:</p>
<p>Circular right shift of the number 6 (0110 in binary) by two bits.</p>

<div>
<div>
<pre class="source">{ &quot;BitSHIFT&quot;: BITSHIFT(6,-2,TRUE) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitSHIFT&quot;: -9223372036854775807 }
</pre></div></div>

<p>This results in -9223372036854775807 (1100 0000 0000 0000 0000 0000 0000 0000 in binary) because the two 1-bits wrapped right, around to the Most Significant Digit position and changed the integer&#x2019;s sign to negative.</p>
</li>
<li>

<p>Example 3:</p>
<p>Circular left shift of the number 524288 (1000 0000 0000 0000 0000 in binary) by 45 bits.</p>

<div>
<div>
<pre class="source">{ &quot;BitSHIFT&quot;: BITSHIFT(524288,45,TRUE) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitSHIFT&quot;: 1 }
</pre></div></div>

<p>This results in 1 because the 1-bit wrapped left, around to the Least Significant Digit position.</p>
</li>
</ul></div>
<div class="section">
<h3><a name="bittest"></a>bittest</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">BITTEST(int_value, positions [, all_set])
</pre></div></div>
</li>
<li>

<p>Returns TRUE if the specified bit, or bits, is a 1; otherwise, returns FALSE if the specified bit, or bits, is a 0 (zero).</p>
<p><b>Note:</b> Specifying a negative or zero bit position will result in null being returned.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li>

<p><tt>int_value</tt>: An integer, or any valid expression which evaluates to an integer, that contains the target bit or bits to test.</p>
</li>
<li>

<p><tt>positions</tt>: An integer or an array of integers specifying the position or positions to be tested.</p>
</li>
<li>

<p><tt>all_set</tt>: (Optional) A boolean, or any valid expression which evaluates to a boolean.</p>
<ul>

<li>

<p>When <tt>all_set</tt> is FALSE, then it returns TRUE even if one bit in one of the positions is set.</p>
</li>
<li>

<p>When <tt>all_set</tt> is TRUE, then it returns TRUE only if all input positions are set.</p>
</li>
</ul>
<p>If omitted, the default is FALSE.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>A boolean, that follows the below table:
<table border="0" class="table table-striped">
<thead>

<tr class="a">
<th> <tt>int_value</tt>                    </th>
<th> <tt>all_set</tt> </th>
<th> Return Value </th></tr>
</thead><tbody>

<tr class="b">
<td> <i>all</i> specified bits are TRUE  </td>
<td> FALSE     </td>
<td> TRUE         </td></tr>
<tr class="a">
<td> <i>all</i> specified bits are TRUE  </td>
<td> TRUE      </td>
<td> TRUE         </td></tr>
<tr class="b">
<td> <i>some</i> specified bits are TRUE </td>
<td> FALSE     </td>
<td> TRUE         </td></tr>
<tr class="a">
<td> <i>some</i> specified bits are TRUE </td>
<td> TRUE      </td>
<td> FALSE        </td></tr>
</tbody>
</table>
</li>
</ul>
</li>
<li>

<p>Limitations:</p>
<ul>

<li>Input values must be integers (such as 1 or 1.0) and cannot contain decimals (such as 1.2).</li>
</ul>
</li>
<li>

<p>Example 1:</p>
<p>In the number 6 (0110 in binary), is bit 1 set?</p>

<div>
<div>
<pre class="source">{ &quot;IsBitSET&quot;: ISBITSET(6,1) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;IsBitSET&quot;: false }
</pre></div></div>

<p>This returns FALSE because bit 1 of 6 (011<b>0</b> in binary) is not set to 1.</p>
</li>
<li>

<p>Example 2:</p>
<p>In the number 1, is either bit 1 or bit 2 set?</p>

<div>
<div>
<pre class="source">{ &quot;BitTEST&quot;: BITTEST(1,[1,2],FALSE) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitTEST&quot;: true }
</pre></div></div>

<p>This returns TRUE because bit 1 of the number 1 (000<b>1</b> in binary) is set to 1.</p>
</li>
<li>

<p>Example 3:</p>
<p>In the number 6 (0110 in binary), are both bits 2 and 3 set?</p>

<div>
<div>
<pre class="source">{ &quot;IsBitSET&quot;: ISBITSET(6,[2,3],TRUE) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;IsBitSET&quot;: true }
</pre></div></div>

<p>This returns TRUE because both bits 2 and 3 in the number 6 (0<b>11</b>0 in binary) are set to 1.</p>
</li>
<li>

<p>Example 4:</p>
<p>In the number 6 (0110 in binary), are all the bits in positions 1 through 3 set?</p>

<div>
<div>
<pre class="source">{ &quot;BitTEST&quot;: BITTEST(6,[1,3],TRUE) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitTEST&quot;: false }
</pre></div></div>

<p>This returns FALSE because bit 1 in the number 6 (011<b>0</b> in binary) is set to 0 (zero).</p>
</li>
</ul>
<p>The function has an alias <tt>isbitset</tt>.</p></div>
<div class="section">
<h3><a name="bitxor"></a>bitxor</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">BITXOR(int_value1, int_value2, ... , int_valueN)
</pre></div></div>
</li>
<li>

<p>Returns the result of a bitwise Exclusive OR operation performed on two or more integer values.</p>
<p>The bitwise Exclusive OR operation compares each bit of <tt>int_value1</tt> to the corresponding bit of <tt>int_value2</tt>.</p>
<p>If there are more than two input values, the first two are compared; then their result is compared to the next input value; and so on.</p>
<p>When the compared bits do not match, the result bit is 1; otherwise, the compared bits do match, and the result bit is 0 (zero), as summarized:</p>
<table border="0" class="table table-striped">
<thead>

<tr class="a">
<th> Bit 1 </th>
<th> Bit 2 </th>
<th> XOR Result Bit </th></tr>
</thead><tbody>

<tr class="b">
<td> 0     </td>
<td> 0     </td>
<td> 0              </td></tr>
<tr class="a">
<td> 0     </td>
<td> 1     </td>
<td> 1              </td></tr>
<tr class="b">
<td> 1     </td>
<td> 0     </td>
<td> 1              </td></tr>
<tr class="a">
<td> 1     </td>
<td> 1     </td>
<td> 0              </td></tr>
</tbody>
</table>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>int_valueI</tt>: Integers, or any valid expressions which evaluate to integers, that are used to compare.</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>An integer, representing the bitwise XOR between the input integers.</li>
</ul>
</li>
<li>

<p>Limitations:</p>
<ul>

<li>Input values must be integers (such as 1 or 1.0) and cannot contain decimals (such as 1.2).</li>
</ul>
</li>
<li>

<p>Example 1:</p>
<p>Perform the XOR operation on 3 (0011 in binary) and 6 (0110 in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitXOR&quot;: BITXOR(3,6) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitXOR&quot;: 5 }
</pre></div></div>

<p>This returns 5 (0101 in binary) because the 1st bit pair and 3rd bit pair are different (resulting in 1) while the 2nd bit pair and 4th bit pair are the same (resulting in 0):</p>

<div>
<div>
<pre class="source">0011 (3)
0110 (6)
====
0101 (5)
</pre></div></div>
</li>
<li>

<p>Example 2:</p>
<p>Perform the XOR operation on 3 (0011 in binary) and 6 (0110 in binary) and 15 (1111 in binary).</p>

<div>
<div>
<pre class="source">{ &quot;BitXOR&quot;: BITXOR(3,6,15) };
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">{ &quot;BitXOR&quot;: 10 }
</pre></div></div>

<p>This returns 10 (1010 in binary) because 3 XOR 6 equals 5 (0101 in binary), and then 5 XOR 15 equals 10 (1010 in binary).</p>
</li>
</ul><!--
 ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 !-->
</div></div>
<div class="section">
<h2><a name="Window_Functions"></a><a name="WindowFunctions" id="WindowFunctions">Window Functions</a></h2>
<p>Window functions are used to compute an aggregate or cumulative value, based on a portion of the tuples selected by a query. For each input tuple, a movable window of tuples is defined. The window determines the tuples to be used by the window function.</p>
<p>The tuples are not grouped into a single output tuple &#x2014; each tuple remains separate in the query output.</p>
<p>All window functions must be used with an OVER clause. Refer to <a href="manual.html#Over_clauses">Window Queries</a> for details.</p>
<p>Window functions cannot appear in the FROM clause clause or LIMIT clause.</p>
<div class="section">
<h3><a name="cume_dist"></a>cume_dist</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">CUME_DIST() OVER ([window-partition-clause] [window-order-clause])
</pre></div></div>
</li>
<li>

<p>Returns the percentile rank of the current tuple as part of the cumulative distribution &#x2013; that is, the number of tuples ranked lower than or equal to the current tuple, including the current tuple, divided by the total number of tuples in the window partition.</p>
<p>The window order clause determines the sort order of the tuples. If the window order clause is omitted, the function returns the same result (1.0) for each tuple.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li>None.</li>
</ul>
</li>
<li>

<p>Clauses:</p>
<ul>

<li>

<p>(Optional) <a href="manual.html#Window_partition_clause">Window Partition Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_order_clause">Window Order Clause</a>.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>A number greater than 0 and less than or equal to 1. The higher the value, the higher the ranking.</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>For each customer, find the cumulative distribution of all orders by order number.</p>

<div>
<div>
<pre class="source">FROM orders AS o
SELECT o.custid, o.orderno, CUME_DIST() OVER (
  PARTITION BY o.custid
  ORDER BY o.orderno
) AS `rank`
ORDER BY o.custid, o.orderno;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;rank&quot;: 0.25,
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1002
  },
  {
    &quot;rank&quot;: 0.5,
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1007
  },
  {
    &quot;rank&quot;: 0.75,
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1008
  },
  {
    &quot;rank&quot;: 1,
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1009
  },
  {
    &quot;rank&quot;: 1,
    &quot;custid&quot;: &quot;C31&quot;,
    &quot;orderno&quot;: 1003
  },
  {
    &quot;rank&quot;: 1,
    &quot;custid&quot;: &quot;C35&quot;,
    &quot;orderno&quot;: 1004
  },
  {
    &quot;rank&quot;: 1,
    &quot;custid&quot;: &quot;C37&quot;,
    &quot;orderno&quot;: 1005
  },
  {
    &quot;rank&quot;: 0.5,
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1001
  },
  {
    &quot;rank&quot;: 1,
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1006
  }
]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="dense_rank"></a>dense_rank</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">DENSE_RANK() OVER ([window-partition-clause] [window-order-clause])
</pre></div></div>
</li>
<li>

<p>Returns the dense rank of the current tuple &#x2013; that is, the number of distinct tuples preceding this tuple in the current window partition, plus one.</p>
<p>The tuples are ordered by the window order clause. If any tuples are tied, they will have the same rank. If the window order clause is omitted, the function returns the same result (1) for each tuple.</p>
<p>For this function, when any tuples have the same rank, the rank of the next tuple will be consecutive, so there will not be a gap in the sequence of returned values. For example, if there are five tuples ranked 3, the next dense rank is 4.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li>None.</li>
</ul>
</li>
<li>

<p>Clauses:</p>
<ul>

<li>

<p>(Optional) <a href="manual.html#Window_partition_clause">Window Partition Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_order_clause">Window Order Clause</a>.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>An integer, greater than or equal to 1.</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>Find the dense rank of all orders by number of items.</p>

<div>
<div>
<pre class="source">FROM orders AS o
SELECT o.orderno, LEN(o.items) AS items,
DENSE_RANK() OVER (
  ORDER BY LEN(o.items)
) AS `rank`
ORDER BY `rank`, o.orderno;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;items&quot;: 0,
    &quot;rank&quot;: 1,
    &quot;orderno&quot;: 1009
  },
  {
    &quot;items&quot;: 1,
    &quot;rank&quot;: 2,
    &quot;orderno&quot;: 1008
  },
  {
    &quot;items&quot;: 2,
    &quot;rank&quot;: 3,
    &quot;orderno&quot;: 1001
  },
  {
    &quot;items&quot;: 2,
    &quot;rank&quot;: 3,
    &quot;orderno&quot;: 1002
  },
  {
    &quot;items&quot;: 2,
    &quot;rank&quot;: 3,
    &quot;orderno&quot;: 1003
  },
  {
    &quot;items&quot;: 2,
    &quot;rank&quot;: 3,
    &quot;orderno&quot;: 1004
  },
  {
    &quot;items&quot;: 2,
    &quot;rank&quot;: 3,
    &quot;orderno&quot;: 1007
  },
  {
    &quot;items&quot;: 3,
    &quot;rank&quot;: 4,
    &quot;orderno&quot;: 1006
  },
  {
    &quot;items&quot;: 4,
    &quot;rank&quot;: 5,
    &quot;orderno&quot;: 1005
  }
]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="first_value"></a>first_value</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">FIRST_VALUE(expr) [nulls-modifier] OVER (window-definition)
</pre></div></div>
</li>
<li>

<p>Returns the requested value from the first tuple in the current window frame, where the window frame is specified by the window definition.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>expr</tt>: The value that you want to return from the first tuple in the window frame. <sup>[</sup><a href="#fn_1"><sup>1</sup></a><sup>]</sup></li>
</ul>
</li>
<li>

<p>Modifiers:</p>
<ul>

<li><a href="manual.html#Window_function_options">NULLS Modifier</a>: (Optional) Determines how NULL or MISSING values are treated when finding the first value in the window frame.
<ul>

<li>

<p><tt>IGNORE NULLS</tt>: If the values for any tuples evaluate to NULL or MISSING, those tuples are ignored when finding the first tuple. In this case, the function returns the first non-NULL, non-MISSING value.</p>
</li>
<li>

<p><tt>RESPECT NULLS</tt>: If the values for any tuples evaluate to NULL or MISSING, those tuples are included when finding the first tuple.</p>
</li>
</ul>
<p>If this modifier is omitted, the default is <tt>RESPECT NULLS</tt>.</p>
</li>
</ul>
</li>
<li>

<p>Clauses:</p>
<ul>

<li>

<p>(Optional) <a href="manual.html#Window_partition_clause">Window Partition Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_order_clause">Window Order Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_frame_clause">Window Frame Clause</a>.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>

<p>The specified value from the first tuple. The order of the tuples is determined by the window order clause.</p>
</li>
<li>

<p>NULL, if the frame was empty or if all values were NULL or MISSING and the <tt>IGNORE NULLS</tt> modifier was specified.</p>
</li>
<li>

<p>In the following cases, this function may return unpredictable results.</p>
<ul>

<li>

<p>If the window order clause is omitted.</p>
</li>
<li>

<p>If the window frame is defined by <tt>ROWS</tt>, and there are tied tuples in the window frame.</p>
</li>
</ul>
</li>
<li>

<p>To make the function return deterministic results, add a window order clause, or add further ordering terms to the window order clause so that no tuples are tied.</p>
</li>
<li>

<p>If the window frame is defined by <tt>RANGE</tt> or <tt>GROUPS</tt>, and there are tied tuples in the window frame, the function returns the first value of the input expression.</p>
</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>For each order, show the customer and the value, including the value of the smallest order from that customer.</p>

<div>
<div>
<pre class="source">FROM orders AS o
LET revenue = ROUND((
  FROM o.items
  SELECT VALUE SUM(qty * price)
)[0], 2)
SELECT o.custid, o.orderno, revenue,
FIRST_VALUE(revenue) OVER (
  PARTITION BY o.custid
  ORDER BY revenue
) AS smallest_order;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1009,
    &quot;revenue&quot;: null,
    &quot;smallest_order&quot;: null
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1007,
    &quot;revenue&quot;: 130.45,
    &quot;smallest_order&quot;: null
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1008,
    &quot;revenue&quot;: 1999.8,
    &quot;smallest_order&quot;: null
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1002,
    &quot;revenue&quot;: 10906.55,
    &quot;smallest_order&quot;: null
  },
  {
    &quot;custid&quot;: &quot;C31&quot;,
    &quot;orderno&quot;: 1003,
    &quot;revenue&quot;: 477.95,
    &quot;smallest_order&quot;: 477.95
  },
  {
    &quot;custid&quot;: &quot;C35&quot;,
    &quot;orderno&quot;: 1004,
    &quot;revenue&quot;: 199.94,
    &quot;smallest_order&quot;: 199.94
  },
  {
    &quot;custid&quot;: &quot;C37&quot;,
    &quot;orderno&quot;: 1005,
    &quot;revenue&quot;: 4639.92,
    &quot;smallest_order&quot;: 4639.92
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1001,
    &quot;revenue&quot;: 157.73,
    &quot;smallest_order&quot;: 157.73
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1006,
    &quot;revenue&quot;: 18847.58,
    &quot;smallest_order&quot;: 157.73
  }
]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="lag"></a>lag</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">LAG(expr[, offset[, default]]) [nulls-modifier] OVER ([window-partition-clause] [window-order-clause])
</pre></div></div>
</li>
<li>

<p>Returns the value from a tuple at a given offset prior to the current tuple position.</p>
<p>The window order clause determines the sort order of the tuples. If the window order clause is omitted, the return values may be unpredictable.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li>

<p><tt>expr</tt>: The value that you want to return from the offset tuple. <sup>[</sup><a href="#fn_1"><sup>1</sup></a><sup>]</sup></p>
</li>
<li>

<p><tt>offset</tt>: (Optional) A positive integer. If omitted, the default is 1.</p>
</li>
<li>

<p><tt>default</tt>: (Optional) The value to return when the offset goes out of partition scope. If omitted, the default is NULL.</p>
</li>
</ul>
</li>
<li>

<p>Modifiers:</p>
<ul>

<li><a href="manual.html#Window_function_options">NULLS Modifier</a>: (Optional) Determines how NULL or MISSING values are treated when finding the offset tuple in the window partition.
<ul>

<li>

<p><tt>IGNORE NULLS</tt>: If the values for any tuples evaluate to NULL or MISSING, those tuples are ignored when finding the offset tuple.</p>
</li>
<li>

<p><tt>RESPECT NULLS</tt>: If the values for any tuples evaluate to NULL or MISSING, those tuples are included when finding the offset tuple.</p>
</li>
</ul>
<p>If this modifier is omitted, the default is <tt>RESPECT NULLS</tt>.</p>
</li>
</ul>
</li>
<li>

<p>Clauses:</p>
<ul>

<li>

<p>(Optional) <a href="manual.html#Window_partition_clause">Window Partition Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_order_clause">Window Order Clause</a>.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>

<p>The specified value from the offset tuple.</p>
</li>
<li>

<p>If the offset tuple is out of partition scope, it returns the default value, or NULL if no default is specified.</p>
</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>For each order, show the customer and the value, including the value of the next-smallest order from that customer.</p>

<div>
<div>
<pre class="source">FROM orders AS o
LET revenue = ROUND((
  FROM o.items
  SELECT VALUE SUM(qty * price)
)[0], 2)
SELECT o.custid, o.orderno, revenue,
LAG(revenue, 1, &quot;No smaller order&quot;) OVER (
  PARTITION BY o.custid
  ORDER BY revenue
) AS next_smallest_order;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1009,
    &quot;revenue&quot;: null,
    &quot;next_smallest_order&quot;: &quot;No smaller order&quot;
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1007,
    &quot;revenue&quot;: 130.45,
    &quot;next_smallest_order&quot;: null
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1008,
    &quot;revenue&quot;: 1999.8,
    &quot;next_smallest_order&quot;: 130.45
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1002,
    &quot;revenue&quot;: 10906.55,
    &quot;next_smallest_order&quot;: 1999.8
  },
  {
    &quot;custid&quot;: &quot;C31&quot;,
    &quot;orderno&quot;: 1003,
    &quot;revenue&quot;: 477.95,
    &quot;next_smallest_order&quot;: &quot;No smaller order&quot;
  },
  {
    &quot;custid&quot;: &quot;C35&quot;,
    &quot;orderno&quot;: 1004,
    &quot;revenue&quot;: 199.94,
    &quot;next_smallest_order&quot;: &quot;No smaller order&quot;
  },
  {
    &quot;custid&quot;: &quot;C37&quot;,
    &quot;orderno&quot;: 1005,
    &quot;revenue&quot;: 4639.92,
    &quot;next_smallest_order&quot;: &quot;No smaller order&quot;
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1001,
    &quot;revenue&quot;: 157.73,
    &quot;next_smallest_order&quot;: &quot;No smaller order&quot;
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1006,
    &quot;revenue&quot;: 18847.58,
    &quot;next_smallest_order&quot;: 157.73
  }
]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="last_value"></a>last_value</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">LAST_VALUE(expr) [nulls-modifier] OVER (window-definition)
</pre></div></div>
</li>
<li>

<p>Returns the requested value from the last tuple in the current window frame, where the window frame is specified by the window definition.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>expr</tt>: The value that you want to return from the last tuple in the window frame. <sup>[</sup><a href="#fn_1"><sup>1</sup></a><sup>]</sup></li>
</ul>
</li>
<li>

<p>Modifiers:</p>
<ul>

<li><a href="manual.html#Window_function_options">NULLS Modifier</a>: (Optional) Determines how NULL or MISSING values are treated when finding the last tuple in the window frame.
<ul>

<li>

<p><tt>IGNORE NULLS</tt>: If the values for any tuples evaluate to NULL or MISSING, those tuples are ignored when finding the last tuple. In this case, the function returns the last non-NULL, non-MISSING value.</p>
</li>
<li>

<p><tt>RESPECT NULLS</tt>: If the values for any tuples evaluate to NULL or MISSING, those tuples are included when finding the last tuple.</p>
</li>
</ul>
<p>If this modifier is omitted, the default is <tt>RESPECT NULLS</tt>.</p>
</li>
</ul>
</li>
<li>

<p>Clauses:</p>
<ul>

<li>

<p>(Optional) <a href="manual.html#Window_partition_clause">Window Partition Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_order_clause">Window Order Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_frame_clause">Window Frame Clause</a>.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>

<p>The specified value from the last tuple. The order of the tuples is determined by the window order clause.</p>
</li>
<li>

<p>NULL, if the frame was empty or if all values were NULL or MISSING and the <tt>IGNORE NULLS</tt> modifier was specified.</p>
</li>
<li>

<p>In the following cases, this function may return unpredictable results.</p>
<ul>

<li>

<p>If the window order clause is omitted.</p>
</li>
<li>

<p>If the window frame clause is omitted.</p>
</li>
<li>

<p>If the window frame is defined by <tt>ROWS</tt>, and there are tied tuples in the window frame.</p>
</li>
</ul>
</li>
<li>

<p>To make the function return deterministic results, add a window order clause, or add further ordering terms to the window order clause so that no tuples are tied.</p>
</li>
<li>

<p>If the window frame is defined by <tt>RANGE</tt> or <tt>GROUPS</tt>, and there are tied tuples in the window frame, the function returns the last value of the input expression.</p>
</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>For each order, show the customer and the value, including the value of the largest order from that customer.</p>

<div>
<div>
<pre class="source">FROM orders AS o
LET revenue = ROUND((
  FROM o.items
  SELECT VALUE SUM(qty * price)
)[0], 2)
SELECT o.custid, o.orderno, revenue,
LAST_VALUE(revenue) OVER (
  PARTITION BY o.custid
  ORDER BY revenue
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING -- &#x278a;
) AS largest_order;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1009,
    &quot;revenue&quot;: null,
    &quot;largest_order&quot;: 10906.55
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1007,
    &quot;revenue&quot;: 130.45,
    &quot;largest_order&quot;: 10906.55
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1008,
    &quot;revenue&quot;: 1999.8,
    &quot;largest_order&quot;: 10906.55
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1002,
    &quot;revenue&quot;: 10906.55,
    &quot;largest_order&quot;: 10906.55
  },
  {
    &quot;custid&quot;: &quot;C31&quot;,
    &quot;orderno&quot;: 1003,
    &quot;revenue&quot;: 477.95,
    &quot;largest_order&quot;: 477.95
  },
  {
    &quot;custid&quot;: &quot;C35&quot;,
    &quot;orderno&quot;: 1004,
    &quot;revenue&quot;: 199.94,
    &quot;largest_order&quot;: 199.94
  },
  {
    &quot;custid&quot;: &quot;C37&quot;,
    &quot;orderno&quot;: 1005,
    &quot;revenue&quot;: 4639.92,
    &quot;largest_order&quot;: 4639.92
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1001,
    &quot;revenue&quot;: 157.73,
    &quot;largest_order&quot;: 18847.58
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1006,
    &quot;revenue&quot;: 18847.58,
    &quot;largest_order&quot;: 18847.58
  }
]
</pre></div></div>

<p>&#x2780; This clause specifies that the window frame should extend to the end of the window partition. Without this clause, the end point of the window frame would always be the current tuple. This would mean that the largest order would always be the same as the current order.</p>
</li>
</ul></div>
<div class="section">
<h3><a name="lead"></a>lead</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">LEAD(expr[, offset[, default]]) [nulls-modifier] OVER ([window-partition-clause] [window-order-clause])
</pre></div></div>
</li>
<li>

<p>Returns the value from a tuple at a given offset ahead of the current tuple position.</p>
<p>The window order clause determines the sort order of the tuples. If the window order clause is omitted, the return values may be unpredictable.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li>

<p><tt>expr</tt>: The value that you want to return from the offset tuple. <sup>[</sup><a href="#fn_1"><sup>1</sup></a><sup>]</sup></p>
</li>
<li>

<p><tt>offset</tt>: (Optional) A positive integer. If omitted, the default is 1.</p>
</li>
<li>

<p><tt>default</tt>: (Optional) The value to return when the offset goes out of window partition scope. If omitted, the default is NULL.</p>
</li>
</ul>
</li>
<li>

<p>Modifiers:</p>
<ul>

<li><a href="manual.html#Window_function_options">NULLS Modifier</a>: (Optional) Determines how NULL or MISSING values are treated when finding the offset tuple in the window partition.
<ul>

<li>

<p><tt>IGNORE NULLS</tt>: If the values for any tuples evaluate to NULL or MISSING, those tuples are ignored when finding the offset tuple.</p>
</li>
<li>

<p><tt>RESPECT NULLS</tt>: If the values for any tuples evaluate to NULL or MISSING, those tuples are included when finding the offset tuple.</p>
</li>
</ul>
<p>If this modifier is omitted, the default is <tt>RESPECT NULLS</tt>.</p>
</li>
</ul>
</li>
<li>

<p>Clauses:</p>
<ul>

<li>

<p>(Optional) <a href="manual.html#Window_partition_clause">Window Partition Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_order_clause">Window Order Clause</a>.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>

<p>The specified value from the offset tuple.</p>
</li>
<li>

<p>If the offset tuple is out of partition scope, it returns the default value, or NULL if no default is specified.</p>
</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>For each order, show the customer and the value, including the value of the next-largest order from that customer.</p>

<div>
<div>
<pre class="source">FROM orders AS o
LET revenue = ROUND((
  FROM o.items
  SELECT VALUE SUM(qty * price)
)[0], 2)
SELECT o.custid, o.orderno, revenue,
LEAD(revenue, 1, &quot;No larger order&quot;) OVER (
  PARTITION BY o.custid
  ORDER BY revenue
) AS next_largest_order;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1009,
    &quot;revenue&quot;: null,
    &quot;next_largest_order&quot;: 130.45
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1007,
    &quot;revenue&quot;: 130.45,
    &quot;next_largest_order&quot;: 1999.8
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1008,
    &quot;revenue&quot;: 1999.8,
    &quot;next_largest_order&quot;: 10906.55
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1002,
    &quot;revenue&quot;: 10906.55,
    &quot;next_largest_order&quot;: &quot;No larger order&quot;
  },
  {
    &quot;custid&quot;: &quot;C31&quot;,
    &quot;orderno&quot;: 1003,
    &quot;revenue&quot;: 477.95,
    &quot;next_largest_order&quot;: &quot;No larger order&quot;
  },
  {
    &quot;custid&quot;: &quot;C35&quot;,
    &quot;orderno&quot;: 1004,
    &quot;revenue&quot;: 199.94,
    &quot;next_largest_order&quot;: &quot;No larger order&quot;
  },
  {
    &quot;custid&quot;: &quot;C37&quot;,
    &quot;orderno&quot;: 1005,
    &quot;revenue&quot;: 4639.92,
    &quot;next_largest_order&quot;: &quot;No larger order&quot;
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1001,
    &quot;revenue&quot;: 157.73,
    &quot;next_largest_order&quot;: 18847.58
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1006,
    &quot;revenue&quot;: 18847.58,
    &quot;next_largest_order&quot;: &quot;No larger order&quot;
  }
]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="nth_value"></a>nth_value</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">NTH_VALUE(expr, offset) [from-modifier] [nulls-modifier] OVER (window-definition)
</pre></div></div>
</li>
<li>

<p>Returns the requested value from a tuple in the current window frame, where the window frame is specified by the window definition.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li>

<p><tt>expr</tt>: The value that you want to return from the offset tuple in the window frame. <sup>[</sup><a href="#fn_1"><sup>1</sup></a><sup>]</sup></p>
</li>
<li>

<p><tt>offset</tt>: The number of the offset tuple within the window frame, counting from 1.</p>
</li>
</ul>
</li>
<li>

<p>Modifiers:</p>
<ul>

<li>

<p><a href="manual.html#Window_function_options">FROM Modifier</a>: (Optional) Determines where the function starts counting the offset.</p>
<ul>

<li>

<p><tt>FROM FIRST</tt>: Counting starts at the first tuple in the window frame. In this case, an offset of 1 is the first tuple in the window frame, 2 is the second tuple, and so on.</p>
</li>
<li>

<p><tt>FROM LAST</tt>: Counting starts at the last tuple in the window frame. In this case, an offset of 1 is the last tuple in the window frame, 2 is the second-to-last tuple, and so on.</p>
</li>
</ul>
<p>The order of the tuples is determined by the window order clause. If this modifier is omitted, the default is <tt>FROM FIRST</tt>.</p>
</li>
<li>

<p><a href="manual.html#Window_function_options">NULLS Modifier</a>: (Optional) Determines how NULL or MISSING values are treated when finding the offset tuple in the window frame.</p>
<ul>

<li>

<p><tt>IGNORE NULLS</tt>: If the values for any tuples evaluate to NULL or MISSING, those tuples are ignored when finding the offset tuple.</p>
</li>
<li>

<p><tt>RESPECT NULLS</tt>: If the values for any tuples evaluate to NULL or MISSING, those tuples are included when finding the offset tuple.</p>
</li>
</ul>
<p>If this modifier is omitted, the default is <tt>RESPECT NULLS</tt>.</p>
</li>
</ul>
</li>
<li>

<p>Clauses:</p>
<ul>

<li>

<p>(Optional) <a href="manual.html#Window_partition_clause">Window Partition Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_order_clause">Window Order Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_frame_clause">Window Frame Clause</a>.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>

<p>The specified value from the offset tuple.</p>
</li>
<li>

<p>In the following cases, this function may return unpredictable results.</p>
<ul>

<li>

<p>If the window order clause is omitted.</p>
</li>
<li>

<p>If the window frame is defined by <tt>ROWS</tt>, and there are tied tuples in the window frame.</p>
</li>
</ul>
</li>
<li>

<p>To make the function return deterministic results, add a window order clause, or add further ordering terms to the window order clause so that no tuples are tied.</p>
</li>
<li>

<p>If the window frame is defined by <tt>RANGE</tt> or <tt>GROUPS</tt>, and there are tied tuples in the window frame, the function returns the first value of the input expression when counting <tt>FROM FIRST</tt>, or the last value of the input expression when counting <tt>FROM LAST</tt>.</p>
</li>
</ul>
</li>
<li>

<p>Example 1:</p>
<p>For each order, show the customer and the value, including the value of the second smallest order from that customer.</p>

<div>
<div>
<pre class="source">FROM orders AS o
LET revenue = ROUND((
  FROM o.items
  SELECT VALUE SUM(qty * price)
)[0], 2)
SELECT o.custid, o.orderno, revenue,
NTH_VALUE(revenue, 2) FROM FIRST OVER (
  PARTITION BY o.custid
  ORDER BY revenue
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING -- &#x278a;
) AS smallest_order_but_1;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1009,
    &quot;revenue&quot;: null,
    &quot;smallest_order_but_1&quot;: 130.45
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1007,
    &quot;revenue&quot;: 130.45, // &#x278b;
    &quot;smallest_order_but_1&quot;: 130.45
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1008,
    &quot;revenue&quot;: 1999.8,
    &quot;smallest_order_but_1&quot;: 130.45
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1002,
    &quot;revenue&quot;: 10906.55,
    &quot;smallest_order_but_1&quot;: 130.45
  },
  {
    &quot;custid&quot;: &quot;C31&quot;,
    &quot;orderno&quot;: 1003,
    &quot;revenue&quot;: 477.95,
    &quot;smallest_order_but_1&quot;: null
  },
  {
    &quot;custid&quot;: &quot;C35&quot;,
    &quot;orderno&quot;: 1004,
    &quot;revenue&quot;: 199.94,
    &quot;smallest_order_but_1&quot;: null
  },
  {
    &quot;custid&quot;: &quot;C37&quot;,
    &quot;orderno&quot;: 1005,
    &quot;revenue&quot;: 4639.92,
    &quot;smallest_order_but_1&quot;: null
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1001,
    &quot;revenue&quot;: 157.73,
    &quot;smallest_order_but_1&quot;: 18847.58
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1006,
    &quot;revenue&quot;: 18847.58, // &#x278b;
    &quot;smallest_order_but_1&quot;: 18847.58
  }
]
</pre></div></div>

<p>&#x2780; This clause specifies that the window frame should extend to the end of the window partition. Without this clause, the end point of the window frame would always be the current tuple. This would mean that for the smallest order, the function would be unable to find the route with the second smallest order.</p>
<p>&#x2781; The second smallest order from this customer.</p>
</li>
<li>

<p>Example 2:</p>
<p>For each order, show the customer and the value, including the value of the second largest order from that customer.</p>

<div>
<div>
<pre class="source">FROM orders AS o
LET revenue = ROUND((
  FROM o.items
  SELECT VALUE SUM(qty * price)
)[0], 2)
SELECT o.custid, o.orderno, revenue,
NTH_VALUE(revenue, 2) FROM LAST OVER (
  PARTITION BY o.custid
  ORDER BY revenue
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING -- &#x278a;
) AS largest_order_but_1;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1002,
    &quot;revenue&quot;: 10906.55,
    &quot;largest_order_but_1&quot;: 1999.8
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1008,
    &quot;revenue&quot;: 1999.8, // &#x278b;
    &quot;largest_order_but_1&quot;: 1999.8
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1007,
    &quot;revenue&quot;: 130.45,
    &quot;largest_order_but_1&quot;: 1999.8
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1009,
    &quot;revenue&quot;: null,
    &quot;largest_order_but_1&quot;: 1999.8
  },
  {
    &quot;custid&quot;: &quot;C31&quot;,
    &quot;orderno&quot;: 1003,
    &quot;revenue&quot;: 477.95,
    &quot;largest_order_but_1&quot;: null
  },
  {
    &quot;custid&quot;: &quot;C35&quot;,
    &quot;orderno&quot;: 1004,
    &quot;revenue&quot;: 199.94,
    &quot;largest_order_but_1&quot;: null
  },
  {
    &quot;custid&quot;: &quot;C37&quot;,
    &quot;orderno&quot;: 1005,
    &quot;revenue&quot;: 4639.92,
    &quot;largest_order_but_1&quot;: null
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1006,
    &quot;revenue&quot;: 18847.58,
    &quot;largest_order_but_1&quot;: 157.73
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1001,
    &quot;revenue&quot;: 157.73, // &#x278b;
    &quot;largest_order_but_1&quot;: 157.73
  }
]
</pre></div></div>

<p>&#x2780; This clause specifies that the window frame should extend to the end of the window partition. Without this clause, the end point of the window frame would always be the current tuple. This would mean the function would be unable to find the second largest order for smaller orders.</p>
<p>&#x2781; The second largest order from this customer.</p>
</li>
</ul></div>
<div class="section">
<h3><a name="ntile"></a>ntile</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">NTILE(num_tiles) OVER ([window-partition-clause] [window-order-clause])
</pre></div></div>
</li>
<li>

<p>Divides the window partition into the specified number of tiles, and allocates each tuple in the window partition to a tile, so that as far as possible each tile has an equal number of tuples. When the set of tuples is not equally divisible by the number of tiles, the function puts more tuples into the lower-numbered tiles. For each tuple, the function returns the number of the tile into which that tuple was placed.</p>
<p>The window order clause determines the sort order of the tuples. If the window order clause is omitted then the tuples are processed in an undefined order.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>num_tiles</tt>: The number of tiles into which you want to divide the window partition. This argument can be an expression and must evaluate to a number. If the number is not an integer, it will be truncated.</li>
</ul>
</li>
<li>

<p>Clauses:</p>
<ul>

<li>

<p>(Optional) <a href="manual.html#Window_partition_clause">Window Partition Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_order_clause">Window Order Clause</a>.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>An value greater than or equal to 1 and less than or equal to the number of tiles.</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>Allocate each order to one of three tiles by value.</p>

<div>
<div>
<pre class="source">FROM orders AS o
LET revenue = ROUND((
  FROM o.items
  SELECT VALUE SUM(qty * price)
)[0], 2)
SELECT o.orderno, revenue,
NTILE(3) OVER (
  ORDER BY revenue
) AS `ntile`;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;ntile&quot;: 1,
    &quot;orderno&quot;: 1009,
    &quot;revenue&quot;: null
  },
  {
    &quot;ntile&quot;: 1,
    &quot;orderno&quot;: 1007,
    &quot;revenue&quot;: 130.45
  },
  {
    &quot;ntile&quot;: 1,
    &quot;orderno&quot;: 1001,
    &quot;revenue&quot;: 157.73
  },
  {
    &quot;ntile&quot;: 2,
    &quot;orderno&quot;: 1004,
    &quot;revenue&quot;: 199.94
  },
  {
    &quot;ntile&quot;: 2,
    &quot;orderno&quot;: 1003,
    &quot;revenue&quot;: 477.95
  },
  {
    &quot;ntile&quot;: 2,
    &quot;orderno&quot;: 1008,
    &quot;revenue&quot;: 1999.8
  },
  {
    &quot;ntile&quot;: 3,
    &quot;orderno&quot;: 1005,
    &quot;revenue&quot;: 4639.92
  },
  {
    &quot;ntile&quot;: 3,
    &quot;orderno&quot;: 1002,
    &quot;revenue&quot;: 10906.55
  },
  {
    &quot;ntile&quot;: 3,
    &quot;orderno&quot;: 1006,
    &quot;revenue&quot;: 18847.58
  }
]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="percent_rank"></a>percent_rank</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">PERCENT_RANK() OVER ([window-partition-clause] [window-order-clause])
</pre></div></div>
</li>
<li>

<p>Returns the percentile rank of the current tuple &#x2013; that is, the rank of the tuples minus one, divided by the total number of tuples in the window partition minus one.</p>
<p>The window order clause determines the sort order of the tuples. If the window order clause is omitted, the function returns the same result (0) for each tuple.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li>None.</li>
</ul>
</li>
<li>

<p>Clauses:</p>
<ul>

<li>

<p>(Optional) <a href="manual.html#Window_partition_clause">Window Partition Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_order_clause">Window Order Clause</a>.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>A number between 0 and 1. The higher the value, the higher the ranking.</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>For each customer, find the percentile rank of all orders by order number.</p>

<div>
<div>
<pre class="source">FROM orders AS o
SELECT o.custid, o.orderno, PERCENT_RANK() OVER (
  PARTITION BY o.custid
  ORDER BY o.orderno
) AS `rank`;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;rank&quot;: 0,
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1002
  },
  {
    &quot;rank&quot;: 0.3333333333333333,
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1007
  },
  {
    &quot;rank&quot;: 0.6666666666666666,
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1008
  },
  {
    &quot;rank&quot;: 1,
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1009
  },
  {
    &quot;rank&quot;: 0,
    &quot;custid&quot;: &quot;C31&quot;,
    &quot;orderno&quot;: 1003
  },
  {
    &quot;rank&quot;: 0,
    &quot;custid&quot;: &quot;C35&quot;,
    &quot;orderno&quot;: 1004
  },
  {
    &quot;rank&quot;: 0,
    &quot;custid&quot;: &quot;C37&quot;,
    &quot;orderno&quot;: 1005
  },
  {
    &quot;rank&quot;: 0,
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1001
  },
  {
    &quot;rank&quot;: 1,
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1006
  }
]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="rank"></a>rank</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">RANK() OVER ([window-partition-clause] [window-order-clause])
</pre></div></div>
</li>
<li>

<p>Returns the rank of the current tuple &#x2013; that is, the number of distinct tuples preceding this tuple in the current window partition, plus one.</p>
<p>The tuples are ordered by the window order clause. If any tuples are tied, they will have the same rank. If the window order clause is omitted, the function returns the same result (1) for each tuple.</p>
<p>When any tuples have the same rank, the rank of the next tuple will include all preceding tuples, so there may be a gap in the sequence of returned values. For example, if there are five tuples ranked 3, the next rank is 8.</p>
<p>To avoid gaps in the returned values, use the DENSE_RANK() function instead.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li>None.</li>
</ul>
</li>
<li>

<p>Clauses:</p>
<ul>

<li>

<p>(Optional) <a href="manual.html#Window_partition_clause">Window Partition Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_order_clause">Window Order Clause</a>.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>An integer, greater than or equal to 1.</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>Find the rank of all orders by number of items.</p>

<div>
<div>
<pre class="source">FROM orders AS o
SELECT o.orderno, LEN(o.items) AS items,
RANK() OVER (
  ORDER BY LEN(o.items)
) AS `rank`;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;items&quot;: 0,
    &quot;rank&quot;: 1,
    &quot;orderno&quot;: 1009
  },
  {
    &quot;items&quot;: 1,
    &quot;rank&quot;: 2,
    &quot;orderno&quot;: 1008
  },
  {
    &quot;items&quot;: 2,
    &quot;rank&quot;: 3,
    &quot;orderno&quot;: 1004
  },
  {
    &quot;items&quot;: 2,
    &quot;rank&quot;: 3,
    &quot;orderno&quot;: 1007
  },
  {
    &quot;items&quot;: 2,
    &quot;rank&quot;: 3,
    &quot;orderno&quot;: 1002
  },
  {
    &quot;items&quot;: 2,
    &quot;rank&quot;: 3,
    &quot;orderno&quot;: 1001
  },
  {
    &quot;items&quot;: 2,
    &quot;rank&quot;: 3,
    &quot;orderno&quot;: 1003
  },
  {
    &quot;items&quot;: 3,
    &quot;rank&quot;: 8,
    &quot;orderno&quot;: 1006
  },
  {
    &quot;items&quot;: 4,
    &quot;rank&quot;: 9,
    &quot;orderno&quot;: 1005
  }
]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="ratio_to_report"></a>ratio_to_report</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">RATIO_TO_REPORT(expr) OVER (window-definition)
</pre></div></div>
</li>
<li>

<p>Returns the fractional ratio of the specified value for each tuple to the sum of values for all tuples in the window frame.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li><tt>expr</tt>: The value for which you want to calculate the fractional ratio. <sup>[</sup><a href="#fn_1"><sup>1</sup></a><sup>]</sup></li>
</ul>
</li>
<li>

<p>Clauses:</p>
<ul>

<li>

<p>(Optional) <a href="manual.html#Window_partition_clause">Window Partition Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_order_clause">Window Order Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_frame_clause">Window Frame Clause</a>.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>

<p>A number between 0 and 1, representing the fractional ratio of the value for the current tuple to the sum of values for all tuples in the current window frame. The sum of returned values for all tuples in the current window frame is 1.</p>
</li>
<li>

<p>If the input expression does not evaluate to a number, or the sum of values for all tuples is zero, it returns NULL.</p>
</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>For each customer, calculate the value of each order as a fraction of the total value of all orders.</p>

<div>
<div>
<pre class="source">FROM orders AS o
LET revenue = ROUND((
  FROM o.items
  SELECT VALUE SUM(qty * price)
)[0], 2)
SELECT o.custid, o.orderno,
RATIO_TO_REPORT(revenue) OVER (
  PARTITION BY o.custid
) AS fractional_ratio;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1007,
    &quot;fractional_ratio&quot;: 0.010006289887088855
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1002,
    &quot;fractional_ratio&quot;: 0.8365971710849288
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1009,
    &quot;fractional_ratio&quot;: null
  },
  {
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1008,
    &quot;fractional_ratio&quot;: 0.15339653902798234
  },
  {
    &quot;custid&quot;: &quot;C31&quot;,
    &quot;orderno&quot;: 1003,
    &quot;fractional_ratio&quot;: 1
  },
  {
    &quot;custid&quot;: &quot;C35&quot;,
    &quot;orderno&quot;: 1004,
    &quot;fractional_ratio&quot;: 1
  },
  {
    &quot;custid&quot;: &quot;C37&quot;,
    &quot;orderno&quot;: 1005,
    &quot;fractional_ratio&quot;: 1
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1006,
    &quot;fractional_ratio&quot;: 0.9917007404772666
  },
  {
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1001,
    &quot;fractional_ratio&quot;: 0.008299259522733382
  }
]
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="row_number"></a>row_number</h3>
<ul>

<li>

<p>Syntax:</p>

<div>
<div>
<pre class="source">ROW_NUMBER() OVER ([window-partition-clause] [window-order-clause])
</pre></div></div>
</li>
<li>

<p>Returns a unique row number for every tuple in every window partition. In each window partition, the row numbering starts at 1.</p>
<p>The window order clause determines the sort order of the tuples. If the window order clause is omitted, the return values may be unpredictable.</p>
</li>
<li>

<p>Arguments:</p>
<ul>

<li>None.</li>
</ul>
</li>
<li>

<p>Clauses:</p>
<ul>

<li>

<p>(Optional) <a href="manual.html#Window_partition_clause">Window Partition Clause</a>.</p>
</li>
<li>

<p>(Optional) <a href="manual.html#Window_order_clause">Window Order Clause</a>.</p>
</li>
</ul>
</li>
<li>

<p>Return Value:</p>
<ul>

<li>An integer, greater than or equal to 1.</li>
</ul>
</li>
<li>

<p>Example:</p>
<p>For each customer, number all orders by value.</p>

<div>
<div>
<pre class="source">FROM orders AS o
LET revenue = ROUND((
  FROM o.items
  SELECT VALUE SUM(qty * price)
)[0], 2)
SELECT o.custid, o.orderno,
ROW_NUMBER() OVER (
  PARTITION BY o.custid
  ORDER BY revenue
) AS `row`;
</pre></div></div>
</li>
<li>

<p>The expected result is:</p>

<div>
<div>
<pre class="source">[
  {
    &quot;row&quot;: 1,
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1009
  },
  {
    &quot;row&quot;: 2,
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1007
  },
  {
    &quot;row&quot;: 3,
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1008
  },
  {
    &quot;row&quot;: 4,
    &quot;custid&quot;: &quot;C13&quot;,
    &quot;orderno&quot;: 1002
  },
  {
    &quot;row&quot;: 1,
    &quot;custid&quot;: &quot;C31&quot;,
    &quot;orderno&quot;: 1003
  },
  {
    &quot;row&quot;: 1,
    &quot;custid&quot;: &quot;C35&quot;,
    &quot;orderno&quot;: 1004
  },
  {
    &quot;row&quot;: 1,
    &quot;custid&quot;: &quot;C37&quot;,
    &quot;orderno&quot;: 1005
  },
  {
    &quot;row&quot;: 1,
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1001
  },
  {
    &quot;row&quot;: 2,
    &quot;custid&quot;: &quot;C41&quot;,
    &quot;orderno&quot;: 1006
  }
]
</pre></div></div>
</li>
</ul><hr />
<p><a name="fn_1" id="fn_1">1</a>. If the query contains the GROUP BY clause or any <a href="#AggregateFunctions">aggregate functions</a>, this expression must only depend on GROUP BY expressions or aggregate functions.</p></div></div>
        </div>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
<div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache
        feather logo, and the Apache AsterixDB project logo are either
        registered trademarks or trademarks of The Apache Software
        Foundation in the United States and other countries.
        All other marks mentioned may be trademarks or registered
        trademarks of their respective owners.
      </div>
        </div>
      </div>
    </footer>
  </body>
</html>
