<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at 2015-11-24
 | Rendered using Apache Maven Fluido Skin 1.3.0
-->
<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="20151124" />
    <meta http-equiv="Content-Language" content="en" />
    <title>AsterixDB &#x2013; Asterix: Using Functions</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.3.0.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.3.0.min.js"></script>

                          
        

          
            </head>
        <body class="topBarDisabled">
          
                
                    
    
        <div class="container-fluid">
          <div id="banner">
        <div class="pull-left">
                                    <a href="http://asterixdb.apache.org/" 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: 2015-11-24</li>
                      
                
                    
                 <li id="projectVersion" class="pull-right">Version: 0.8.7-incubating</li>
      
                                            <li class="divider pull-right">|</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="span3">
          <div class="well sidebar-nav">
                
                    
                <ul class="nav nav-list">
                    <li class="nav-header">Documentation</li>
                                
      <li>
    
                          <a href="../install.html" title="Installing and Managing AsterixDB using Managix">
          <i class="none"></i>
        Installing and Managing AsterixDB using Managix</a>
            </li>
                  
      <li>
    
                          <a href="../yarn.html" title="Deploying AsterixDB using YARN">
          <i class="none"></i>
        Deploying AsterixDB using YARN</a>
            </li>
                  
      <li>
    
                          <a href="../aql/primer.html" title="AsterixDB 101: An ADM and AQL Primer">
          <i class="none"></i>
        AsterixDB 101: An ADM and AQL Primer</a>
            </li>
                  
      <li>
    
                          <a href="../aql/primer-sql-like.html" title="AsterixDB 101: An ADM and AQL Primer (For SQL Fans)">
          <i class="none"></i>
        AsterixDB 101: An ADM and AQL Primer (For SQL Fans)</a>
            </li>
                  
      <li>
    
                          <a href="../aql/js-sdk.html" title="AsterixDB Javascript SDK">
          <i class="none"></i>
        AsterixDB Javascript SDK</a>
            </li>
                  
      <li>
    
                          <a href="../aql/datamodel.html" title="Asterix Data Model (ADM)">
          <i class="none"></i>
        Asterix Data Model (ADM)</a>
            </li>
                  
      <li>
    
                          <a href="../aql/manual.html" title="Asterix Query Language (AQL)">
          <i class="none"></i>
        Asterix Query Language (AQL)</a>
            </li>
                  
      <li class="active">
    
            <a href="#"><i class="none"></i>AQL Functions</a>
          </li>
                  
      <li>
    
                          <a href="../aql/allens.html" title="AQL Allen's Relations Functions">
          <i class="none"></i>
        AQL Allen's Relations Functions</a>
            </li>
                  
      <li>
    
                          <a href="../aql/similarity.html" title="AQL Support of Similarity Queries">
          <i class="none"></i>
        AQL Support of Similarity Queries</a>
            </li>
                  
      <li>
    
                          <a href="../aql/externaldata.html" title="Accessing External Data">
          <i class="none"></i>
        Accessing External Data</a>
            </li>
                  
      <li>
    
                          <a href="../feeds/tutorial.html" title="Support for Data Ingestion in AsterixDB">
          <i class="none"></i>
        Support for Data Ingestion in AsterixDB</a>
            </li>
                  
      <li>
    
                          <a href="../udf.html" title="Support for User Defined Functions in AsterixDB">
          <i class="none"></i>
        Support for User Defined Functions in AsterixDB</a>
            </li>
                  
      <li>
    
                          <a href="../aql/filters.html" title="Filter-Based LSM Index Acceleration">
          <i class="none"></i>
        Filter-Based LSM Index Acceleration</a>
            </li>
                  
      <li>
    
                          <a href="../api.html" title="HTTP API to AsterixDB">
          <i class="none"></i>
        HTTP API to AsterixDB</a>
            </li>
            </ul>
                
                    
                
          <hr class="divider" />

           <div id="poweredBy">
                            <div class="clear"></div>
                            <div class="clear"></div>
                            <div class="clear"></div>
                                                                                                                         <a href="https://code.google.com/p/hyracks/" title="Hyracks" class="builtBy">
        <img class="builtBy"  alt="Hyracks" src="../images/hyrax_ts.png"    />
      </a>
                      </div>
          </div>
        </div>
        
                
        <div id="bodyColumn"  class="span9" >
                                  
            <!-- ! 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>Asterix: Using Functions</h1>
<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="#AggregateFunctions">Aggregate 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="#RecordFunctions">Record Functions</a></li>
  
<li><a href="#OtherFunctions">Other Functions</a></li>
</ul>
<p>Asterix provides various classes of functions to support operations on numeric, string, spatial, and temporal data. This document explains how to use these functions.</p></div>
<div class="section">
<h2><a name="Numeric_Functions_Back_to_TOC"></a><a name="NumericFunctions" id="NumericFunctions">Numeric Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
<div class="section">
<h3><a name="abs"></a>abs</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>abs(numeric_expression)
</pre></div></div></li>
  
<li>
<p>Computes the absolute value of the argument.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>numeric_expression</tt>: A <tt>int8</tt>/<tt>int16</tt>/<tt>int32</tt>/<tt>int64</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, or <tt>null</tt> if the argument is a <tt>null</tt> value.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $v1 := abs(2013)
let $v2 := abs(-4036)
let $v3 := abs(0)
let $v4 := abs(float(&quot;-2013.5&quot;))
let $v5 := abs(double(&quot;-2013.593823748327284&quot;))
return { &quot;v1&quot;: $v1, &quot;v2&quot;: $v2, &quot;v3&quot;: $v3, &quot;v4&quot;: $v4, &quot;v5&quot;: $v5 }
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;v1&quot;: 2013, &quot;v2&quot;: 4036, &quot;v3&quot;: 0, &quot;v4&quot;: 2013.5f, &quot;v5&quot;: 2013.5938237483274d }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="ceiling"></a>ceiling</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>ceiling(numeric_expression)
</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_expression</tt>: A <tt>int8</tt>/<tt>int16</tt>/<tt>int32</tt>/<tt>int64</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, or <tt>null</tt> if the input is <tt>null</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $v1 := ceiling(2013)
let $v2 := ceiling(-4036)
let $v3 := ceiling(0.3)
let $v4 := ceiling(float(&quot;-2013.2&quot;))
let $v5 := ceiling(double(&quot;-2013.893823748327284&quot;))
return { &quot;v1&quot;: $v1, &quot;v2&quot;: $v2, &quot;v3&quot;: $v3, &quot;v4&quot;: $v4, &quot;v5&quot;: $v5 }
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;v1&quot;: 2013, &quot;v2&quot;: -4036, &quot;v3&quot;: 1.0d, &quot;v4&quot;: -2013.0f, &quot;v5&quot;: -2013.0d }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="floor"></a>floor</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>floor(numeric_expression)
</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_expression</tt>: A <tt>int8</tt>/<tt>int16</tt>/<tt>int32</tt>/<tt>int64</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, or <tt>null</tt> if the input is <tt>null</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $v1 := floor(2013)
let $v2 := floor(-4036)
let $v3 := floor(0.8)
let $v4 := floor(float(&quot;-2013.2&quot;))
let $v5 := floor(double(&quot;-2013.893823748327284&quot;))
return { &quot;v1&quot;: $v1, &quot;v2&quot;: $v2, &quot;v3&quot;: $v3, &quot;v4&quot;: $v4, &quot;v5&quot;: $v5 }
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;v1&quot;: 2013, &quot;v2&quot;: -4036, &quot;v3&quot;: 0.0d, &quot;v4&quot;: -2014.0f, &quot;v5&quot;: -2014.0d }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="round"></a>round</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>round(numeric_expression)
</pre></div></div></li>
  
<li>
<p>Computes the number with no fractional part that is closest (and also closest to positive infinity) to the argument.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>numeric_expression</tt>: A <tt>int8</tt>/<tt>int16</tt>/<tt>int32</tt>/<tt>int64</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>The rounded value for the given number in the same type as the input argument, or <tt>null</tt> if the input is <tt>null</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $v1 := round(2013)
let $v2 := round(-4036)
let $v3 := round(0.8)
let $v4 := round(float(&quot;-2013.256&quot;))
let $v5 := round(double(&quot;-2013.893823748327284&quot;))
return { &quot;v1&quot;: $v1, &quot;v2&quot;: $v2, &quot;v3&quot;: $v3, &quot;v4&quot;: $v4, &quot;v5&quot;: $v5 }
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;v1&quot;: 2013, &quot;v2&quot;: -4036, &quot;v3&quot;: 1.0d, &quot;v4&quot;: -2013.0f, &quot;v5&quot;: -2014.0d }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="round-half-to-even"></a>round-half-to-even</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>round-half-to-even(numeric_expression, [precision])
</pre></div></div></li>
  
<li>
<p>Computes the closest numeric value to <tt>numeric_expression</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_expression</tt>: A <tt>int8</tt>/<tt>int16</tt>/<tt>int32</tt>/<tt>int64</tt>/<tt>float</tt>/<tt>double</tt> value.</li>
    
<li><tt>precision</tt>: An optional integer 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, or <tt>null</tt> if the input is <tt>null</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $v1 := round-half-to-even(2013)
let $v2 := round-half-to-even(-4036)
let $v3 := round-half-to-even(0.8)
let $v4 := round-half-to-even(float(&quot;-2013.256&quot;))
let $v5 := round-half-to-even(double(&quot;-2013.893823748327284&quot;))
let $v6 := round-half-to-even(double(&quot;-2013.893823748327284&quot;), 2)
let $v7 := round-half-to-even(2013, 4)
let $v8 := round-half-to-even(float(&quot;-2013.256&quot;), 5)
return { &quot;v1&quot;: $v1, &quot;v2&quot;: $v2, &quot;v3&quot;: $v3, &quot;v4&quot;: $v4, &quot;v5&quot;: $v5, &quot;v6&quot;: $v6, &quot;v7&quot;: $v7, &quot;v8&quot;: $v8 }
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;v1&quot;: 2013, &quot;v2&quot;: -4036, &quot;v3&quot;: 1.0d, &quot;v4&quot;: -2013.0f, &quot;v5&quot;: -2014.0d, &quot;v6&quot;: -2013.89d, &quot;v7&quot;: 2013, &quot;v8&quot;: -2013.256f }
</pre></div></div></li>
</ul></div></div>
<div class="section">
<h2><a name="String_Functions_Back_to_TOC"></a><a name="StringFunctions" id="StringFunctions">String Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
<div class="section">
<h3><a name="string-to-codepoint"></a>string-to-codepoint</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>string-to-codepoint(string_expression)
</pre></div></div></li>
  
<li>
<p>Converts the string <tt>string_expression</tt> to its code-based representation.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</tt> : A <tt>string</tt> that will be converted.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>OrderedList</tt> of the code points for the string <tt>string_expression</tt>.</li>
  </ul></li>
</ul></div>
<div class="section">
<h3><a name="codepoint-to-string"></a>codepoint-to-string</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>codepoint-to-string(list_expression)
</pre></div></div></li>
  
<li>
<p>Converts the ordered code-based representation <tt>list_expression</tt> to the corresponding string.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>list_expression</tt> : An <tt>OrderedList</tt> of code-points.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>A <tt>string</tt> representation of <tt>list_expression</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $s := &quot;Hello ASTERIX!&quot;
let $l := string-to-codepoint($s)
let $ss := codepoint-to-string($l)
return {&quot;codes&quot;: $l, &quot;string&quot;: $ss}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;codes&quot;: [ 72, 101, 108, 108, 111, 32, 65, 83, 84, 69, 82, 73, 88, 33 ], &quot;string&quot;: &quot;Hello ASTERIX!&quot; }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="contains"></a>contains</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>contains(string_expression, substring_to_contain)
</pre></div></div></li>
  
<li>
<p>Checks whether the string <tt>string_expression</tt> contains the string <tt>substring_to_contain</tt></p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</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_expression</tt> contains <tt>substring_to_contain</tt>, and <tt>false</tt> otherwise.</li>
  </ul></li>
  
<li>Note: An <a href="similarity.html#UsingIndexesToSupportSimilarityQueries">n-gram index</a> can be utilized for this function.</li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('FacebookMessages')
where contains($i.message, &quot;phone&quot;)
return {&quot;mid&quot;: $i.message-id, &quot;message&quot;: $i.message}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;mid&quot;: 2, &quot;message&quot;: &quot; dislike iphone its touch-screen is horrible&quot; }
{ &quot;mid&quot;: 13, &quot;message&quot;: &quot; dislike iphone the voice-command is bad:(&quot; }
{ &quot;mid&quot;: 15, &quot;message&quot;: &quot; like iphone the voicemail-service is awesome&quot; }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="like"></a>like</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>like(string_expression, string_pattern)
</pre></div></div></li>
  
<li>
<p>Checks whether the string <tt>string_expression</tt> contains the string pattern <tt>string_pattern</tt>. Compared to the <tt>contains</tt> function, the <tt>like</tt> function also supports regular expressions.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</tt> : A <tt>string</tt> that might contain the pattern or <tt>null</tt>.</li>
    
<li><tt>string_pattern</tt> : A pattern <tt>string</tt> that might be contained or <tt>null</tt>.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>A <tt>boolean</tt> value, <tt>true</tt> if <tt>string_expression</tt> contains the pattern <tt>string_pattern</tt>, and <tt>false</tt> otherwise.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('FacebookMessages')
where like($i.message, &quot;%at&amp;t%&quot;)
return $i.message
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot; can't stand at&amp;t the network is horrible:(&quot;
&quot; can't stand at&amp;t its plan is terrible&quot;
&quot; love at&amp;t its 3G is good:)&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 class="source">
<div class="source">
<pre>starts-with(string_expression, substring_to_start_with)
</pre></div></div></li>
  
<li>
<p>Checks whether the string <tt>string_expression</tt> starts with the string <tt>substring_to_start_with</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</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_expression</tt> starts with the string <tt>substring_to_start_with</tt>, and <tt>false</tt> otherwise.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('FacebookMessages')
where starts-with($i.message, &quot; like&quot;)
return $i.message
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot; like samsung the plan is amazing&quot;
&quot; like t-mobile its platform is mind-blowing&quot;
&quot; like verizon the 3G is awesome:)&quot;
&quot; like iphone the voicemail-service is awesome&quot;
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="ends-with"></a>ends-with</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>ends-with(string_expression, substring_to_end_with)
</pre></div></div></li>
  
<li>
<p>Checks whether the string <tt>string_expression</tt> ends with the string <tt>substring_to_end_with</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</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>, returns <tt>true</tt> if <tt>string_expression</tt> ends with the string <tt>substring_to_end_with</tt>, and <tt>false</tt> otherwise.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('FacebookMessages')
where ends-with($i.message, &quot;:)&quot;)
return $i.message
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot; love sprint its shortcut-menu is awesome:)&quot;
&quot; like verizon the 3G is awesome:)&quot;
&quot; love at&amp;t its 3G is good:)&quot;
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="string-concat"></a>string-concat</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>string-concat(list_expression)
</pre></div></div></li>
  
<li>
<p>Concatenates a list of strings <tt>list_expression</tt> into a single string.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>list_expression</tt> : An <tt>OrderedList</tt> or <tt>UnorderedList</tt> of <tt>string</tt>s (could be <tt>null</tt>) to be concatenated.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>Returns the concatenated <tt>string</tt> value.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $i := &quot;ASTERIX&quot;
let $j := &quot; &quot;
let $k := &quot;ROCKS!&quot;
return string-concat([$i, $j, $k])
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&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 class="source">
<div class="source">
<pre>string-join(list_expression, string_expression)
</pre></div></div></li>
  
<li>
<p>Joins a list of strings <tt>list_expression</tt> with the given separator <tt>string_expression</tt> into a single string.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>list_expression</tt> : An <tt>OrderedList</tt> or <tt>UnorderedList</tt> of strings (could be <tt>null</tt>) to be joined.</li>
    
<li><tt>string_expression</tt> : A <tt>string</tt> as the separator.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>Returns the joined <tt>String</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $i := [&quot;ASTERIX&quot;, &quot;ROCKS~&quot;]
return string-join($i, &quot;!! &quot;)
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot;ASTERIX!! ROCKS~&quot;
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="lowercase"></a>lowercase</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>lowercase(string_expression)
</pre></div></div></li>
  
<li>
<p>Converts a given string <tt>string_expression</tt> to its lowercase form.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</tt> : A <tt>string</tt> to be converted.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>Returns a <tt>string</tt> as the lowercase form of the given <tt>string_expression</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $i := &quot;ASTERIX&quot;
return lowercase($i)
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>asterix
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="uppercase"></a>uppercase</h3>

<ul>
  
<li>Syntax:</li>
</ul>
<p>uppercase(string_expression)</p>

<ul>
  
<li>Converts a given string <tt>string_expression</tt> to its uppercase form.</li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</tt> : A <tt>string</tt> to be converted.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>Returns a <tt>string</tt> as the uppercase form of the given <tt>string_expression</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $i := &quot;asterix&quot;
return uppercase($i)
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>ASTERIX
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="uppercase"></a>uppercase</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>uppercase(string_expression)
</pre></div></div></li>
  
<li>
<p>Converts a given string <tt>string_expression</tt> to its uppercase form.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</tt> : A <tt>string</tt> to be converted.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>Returns a <tt>string</tt> as the uppercase form of the given <tt>string_expression</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $i := &quot;asterix&quot;
return uppercase($i)
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>ASTERIX
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="matches"></a>matches</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>matches(string_expression, string_pattern)
</pre></div></div></li>
  
<li>
<p>Checks whether the strings <tt>string_expression</tt> matches the given pattern <tt>string_pattern</tt> (A Java regular expression pattern).</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</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>A <tt>boolean</tt>, returns <tt>true</tt> if <tt>string_expression</tt> matches the pattern <tt>string_pattern</tt>, and <tt>false</tt> otherwise.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('FacebookMessages')
where matches($i.message, &quot;dislike iphone&quot;)
return $i.message
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot; dislike iphone its touch-screen is horrible&quot;
&quot; dislike iphone the voice-command is bad:(&quot;
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="replace"></a>replace</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>replace(string_expression, string_pattern, string_replacement[, string_flags])
</pre></div></div></li>
  
<li>
<p>Checks whether the string <tt>string_expression</tt> matches the given pattern <tt>string_pattern</tt>, and replace the matched pattern <tt>string_pattern</tt> with the new pattern <tt>string_replacement</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</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.</li>
    
<li>The following modes are enabled with these flags: dotall (s), multiline (m), case-insenitive (i), and comments and whitespace (x).</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>Returns a <tt>string</tt> that is obtained after the replacements.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('FacebookMessages')
where matches($i.message, &quot; like iphone&quot;)
return replace($i.message, &quot; like iphone&quot;, &quot;like android&quot;)
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot;like android the voicemail-service is awesome&quot;
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="string-length"></a>string-length</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>string-length(string_expression)
</pre></div></div></li>
  
<li>
<p>Returns the length of the string <tt>string_expression</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</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>int64</tt> that represents the length of <tt>string_expression</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('FacebookMessages')
return {&quot;mid&quot;: $i.message-id, &quot;message-len&quot;: string-length($i.message)}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;mid&quot;: 1, &quot;message-len&quot;: 43 }
{ &quot;mid&quot;: 2, &quot;message-len&quot;: 44 }
{ &quot;mid&quot;: 3, &quot;message-len&quot;: 33 }
{ &quot;mid&quot;: 4, &quot;message-len&quot;: 43 }
{ &quot;mid&quot;: 5, &quot;message-len&quot;: 46 }
{ &quot;mid&quot;: 6, &quot;message-len&quot;: 43 }
{ &quot;mid&quot;: 7, &quot;message-len&quot;: 37 }
{ &quot;mid&quot;: 8, &quot;message-len&quot;: 33 }
{ &quot;mid&quot;: 9, &quot;message-len&quot;: 34 }
{ &quot;mid&quot;: 10, &quot;message-len&quot;: 50 }
{ &quot;mid&quot;: 11, &quot;message-len&quot;: 38 }
{ &quot;mid&quot;: 12, &quot;message-len&quot;: 52 }
{ &quot;mid&quot;: 13, &quot;message-len&quot;: 42 }
{ &quot;mid&quot;: 14, &quot;message-len&quot;: 27 }
{ &quot;mid&quot;: 15, &quot;message-len&quot;: 45 }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="substring"></a>substring</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>substring(string_expression, offset[, length])
</pre></div></div></li>
  
<li>
<p>Returns the substring from the given string <tt>string_expression</tt> based on the given start offset <tt>offset</tt> with the optional <tt>length</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</tt> : A <tt>string</tt> to be extracted.</li>
    
<li><tt>offset</tt> : An <tt>int64</tt> as the starting offset of the substring in <tt>string_expression</tt>.</li>
    
<li><tt>length</tt> : (Optional) An <tt>int64</tt> as the length of the substring.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>A <tt>string</tt> that represents the substring.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('FacebookMessages')
where string-length($i.message) &gt; 50
return substring($i.message, 50)
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot;G:(&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 class="source">
<div class="source">
<pre>substring-before(string_expression, string_pattern)
</pre></div></div></li>
  
<li>
<p>Returns the substring from the given string <tt>string_expression</tt> before the given pattern <tt>string_pattern</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('FacebookMessages')
where contains($i.message, &quot;iphone&quot;)
return substring-before($i.message, &quot;iphone&quot;)
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot; dislike &quot;
&quot; dislike &quot;
&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>
  
<div class="source">
<div class="source">
<pre>substring-after(string_expression, string_pattern)
</pre></div></div></li>
  
<li>
<p>Returns the substring from the given string <tt>string_expression</tt> after the given pattern <tt>string_pattern</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('FacebookMessages')
where contains($i.message, &quot;iphone&quot;)
return substring-after($i.message, &quot;iphone&quot;)
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot; its touch-screen is horrible&quot;
&quot; the voice-command is bad:(&quot;
&quot; the voicemail-service is awesome&quot;
</pre></div></div></li>
</ul></div></div>
<div class="section">
<h2><a name="Aggregate_Functions_Back_to_TOC"></a><a name="AggregateFunctions" id="AggregateFunctions">Aggregate Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
<div class="section">
<h3><a name="count"></a>count</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>count(list)
</pre></div></div></li>
  
<li>
<p>Gets the number of items in the given list.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>list</tt>: An <tt>orderedList</tt> or <tt>unorderedList</tt> containing the items to be counted, or a <tt>null</tt> value.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>int64</tt> value representing the number of items in the given list. <tt>0i64</tt> is returned if the input is <tt>null</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $l1 := ['hello', 'world', 1, 2, 3]
let $l2 := for $i in dataset TwitterUsers return $i
return {&quot;count1&quot;: count($l1), &quot;count2&quot;: count($l2)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;count1&quot;: 5i64, &quot;count2&quot;: 4i64 }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="avg"></a>avg</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>avg(num_list)
</pre></div></div></li>
  
<li>
<p>Gets the average value of the items in the given list.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>num_list</tt>: An <tt>orderedList</tt> or <tt>unorderedList</tt> containing numeric or null values, or a <tt>null</tt> value.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>double</tt> value representing the average of the numbers in the given list. <tt>null</tt> is returned if the input is <tt>null</tt>, or the input list contains <tt>null</tt>. Non-numeric types in the input list will cause an error.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $l := for $i in dataset TwitterUsers return $i.friends_count
return {&quot;avg_friend_count&quot;: avg($l)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;avg_friend_count&quot;: 191.5d }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="sum"></a>sum</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>sum(num_list)
</pre></div></div></li>
  
<li>
<p>Gets the sum of the items in the given list.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>num_list</tt>: An <tt>orderedList</tt> or <tt>unorderedList</tt> containing numeric or null values, or a <tt>null</tt> value.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>The sum of the numbers in the given list. The returning type is decided by the item type with the highest order in the numeric type promotion order (<tt>int8</tt>-&gt; <tt>int16</tt>-&gt;<tt>int32</tt>-&gt;<tt>int64</tt>-&gt;<tt>float</tt>-&gt;<tt>double</tt>) among items. <tt>null</tt> is returned if the input is <tt>null</tt>, or the input list contains <tt>null</tt>. Non-numeric types in the input list will cause an error.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $l := for $i in dataset TwitterUsers return $i.friends_count
return {&quot;sum_friend_count&quot;: sum($l)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;sum_friend_count&quot;: 766 }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="minmax"></a>min/max</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>min(num_list), max(num_list)
</pre></div></div></li>
  
<li>
<p>Gets the min/max value of numeric items in the given list.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>num_list</tt>: An <tt>orderedList</tt> or <tt>unorderedList</tt> containing the items to be compared, or a <tt>null</tt> value.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>The min/max value of the given list. The returning type is decided by the item type with the highest order in the numeric type promotion order (<tt>int8</tt>-&gt; <tt>int16</tt>-&gt;<tt>int32</tt>-&gt;<tt>int64</tt>-&gt;<tt>float</tt>-&gt;<tt>double</tt>) among items. <tt>null</tt> is returned if the input is <tt>null</tt>, or the input list contains <tt>null</tt>. Non-numeric types in the input list will cause an error.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $l := for $i in dataset TwitterUsers return $i. friends_count
return {&quot;min_friend_count&quot;: min($l), &quot;max_friend_count&quot;: max($l)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;min_friend_count&quot;: 18, &quot;max_friend_count&quot;: 445 }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="sql-count"></a>sql-count</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>sql-count(list)
</pre></div></div></li>
  
<li>
<p>Gets the number of non-null items in the given list.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>list</tt>: An <tt>orderedList</tt> or <tt>unorderedList</tt> containing the items to be counted, or a <tt>null</tt> value.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>int64</tt> value representing the number of non-null items in the given list. The value <tt>0i64</tt> is returned if the input is <tt>null</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p></li>
</ul>

<div class="source">
<div class="source">
<pre>    let $l1 := ['hello', 'world', 1, 2, 3, null]
    return {&quot;count&quot;: sql-count($l1)}
</pre></div></div>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;count&quot;: 5i64 }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="sql-avg"></a>sql-avg</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>sql-avg(num_list)
</pre></div></div></li>
  
<li>
<p>Gets the average value of the non-null items in the given list.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>num_list</tt>: An <tt>orderedList</tt> or <tt>unorderedList</tt> containing numeric or null values, or a <tt>null</tt> value.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>A <tt>double</tt> value representing the average of the non-null numbers in the given list. The <tt>null</tt> value is returned if the input is <tt>null</tt>. Non-numeric types in the input list will cause an error.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $l := [1.2, 2.3, 3.4, 0, null]
return {&quot;avg&quot;: sql-avg($l)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;avg&quot;: 1.725d }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="sql-sum"></a>sql-sum</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>sql-sum(num_list)
</pre></div></div></li>
  
<li>
<p>Gets the sum of the non-null items in the given list.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>num_list</tt>: An <tt>orderedList</tt> or <tt>unorderedList</tt> containing numeric or null values, or a <tt>null</tt> value.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>The sum of the non-null numbers in the given list. The returning type is decided by the item type with the highest order in the numeric type promotion order (<tt>int8</tt>-&gt; <tt>int16</tt>-&gt;<tt>int32</tt>-&gt;<tt>int64</tt>-&gt;<tt>float</tt>-&gt;<tt>double</tt>) among items. The value <tt>null</tt> is returned if the input is <tt>null</tt>. Non-numeric types in the input list will cause an error.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $l := [1.2, 2.3, 3.4, 0, null]
return {&quot;sum&quot;: sql-sum($l)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;sum&quot;: 6.9d }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="sql-minmax"></a>sql-min/max</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>sql-min(num_list), sql-max(num_list)
</pre></div></div></li>
  
<li>
<p>Gets the min/max value of the non-null numeric items in the given list.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>num_list</tt>: An <tt>orderedList</tt> or <tt>unorderedList</tt> containing the items to be compared, or a <tt>null</tt> value.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>The min/max value of the given list. The returning type is decided by the item type with the highest order in the numeric type promotion order (<tt>int8</tt>-&gt; <tt>int16</tt>-&gt;<tt>int32</tt>-&gt;<tt>int64</tt>-&gt;<tt>float</tt>-&gt;<tt>double</tt>) among items. The value <tt>null</tt> is returned if the input is <tt>null</tt>. Non-numeric types in the input list will cause an error.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $l := [1.2, 2.3, 3.4, 0, null]
return {&quot;min&quot;: sql-min($l), &quot;max&quot;: sql-max($l)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;min&quot;: 0.0d, &quot;max&quot;: 3.4d }
</pre></div></div></li>
</ul></div></div>
<div class="section">
<h2><a name="Spatial_Functions_Back_to_TOC"></a><a name="SpatialFunctions" id="SpatialFunctions">Spatial Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
<div class="section">
<h3><a name="create-point"></a>create-point</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>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>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $c :=  create-point(30.0,70.0)
return {&quot;point&quot;: $c}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &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 class="source">
<div class="source">
<pre>create-line(point_expression1, point_expression2)
</pre></div></div></li>
  
<li>
<p>Creates the primitive type <tt>line</tt> using <tt>point_expression1</tt> and <tt>point_expression2</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>point_expression1</tt> : A <tt>point</tt> that represents the start point of the line.</li>
    
<li><tt>point_expression2</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>point_expression1</tt> and <tt>point_expression2</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $c :=  create-line(create-point(30.0,70.0), create-point(50.0,90.0))
return {&quot;line&quot;: $c}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &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 class="source">
<div class="source">
<pre>create-rectangle(point_expression1, point_expression2)
</pre></div></div></li>
  
<li>
<p>Creates the primitive type <tt>rectangle</tt> using <tt>point_expression1</tt> and <tt>point_expression2</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>point_expression1</tt> : A <tt>point</tt> that represents the lower-left point of the rectangle.</li>
    
<li><tt>point_expression2</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>point_expression1</tt> and <tt>point_expression2</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $c :=  create-rectangle(create-point(30.0,70.0), create-point(50.0,90.0))
return {&quot;rectangle&quot;: $c}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &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 class="source">
<div class="source">
<pre>create-circle(point_expression, radius)
</pre></div></div></li>
  
<li>
<p>Creates the primitive type <tt>circle</tt> using <tt>point_expression</tt> and <tt>radius</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>point_expression</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_expression</tt> and <tt>radius</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $c :=  create-circle(create-point(30.0,70.0), 5.0)
return {&quot;circle&quot;: $c}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &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 class="source">
<div class="source">
<pre>create-polygon(list_expression)
</pre></div></div></li>
  
<li>
<p>Creates the primitive type <tt>polygon</tt> using the double values provided in the argument <tt>list_expression</tt>. Each two consecutive double values represent a point starting from the first double value in the list. Note that at least six double values should be specified, meaning a total of three points.</p></li>
  
<li>Arguments:</li>
  
<li><tt>list_expression</tt> : An OrderedList of doubles representing the points of the polygon.</li>
  
<li>Return Value:</li>
  
<li>A <tt>polygon</tt>, represents a spatial simple polygon created using the points provided in <tt>list_expression</tt>.</li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $c :=  create-polygon([1.0,1.0,2.0,2.0,3.0,3.0,4.0,4.0])
return {&quot;polygon&quot;: $c}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &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-xget-y"></a>get-x/get-y</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>get-x(point_expression) or get-y(point_expression)
</pre></div></div></li>
  
<li>
<p>Returns the x or y coordinates of a point <tt>point_expression</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>point_expression</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_expression</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $point := create-point(2.3,5.0)
return {&quot;x-coordinate&quot;: get-x($point), &quot;y-coordinate&quot;: get-y($point)}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;x-coordinate&quot;: 2.3d, &quot;y-coordinate&quot;: 5.0d }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="get-points"></a>get-points</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>get-points(spatial_expression)
</pre></div></div></li>
  
<li>
<p>Returns an ordered list of the points forming the spatial object <tt>spatial_expression</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>spatial_expression</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>OrderedList</tt> of the points forming the spatial object <tt>spatial_expression</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $line := create-line(create-point(100.6,99.4), create-point(-72.0,-76.9))
let $rectangle := create-rectangle(create-point(9.2,49.0), create-point(77.8,111.1))
let $polygon := create-polygon([1.0,1.0,2.0,2.0,3.0,3.0,4.0,4.0])
let $line_list := get-points($line)
let $rectangle_list := get-points($rectangle)
let $polygon_list := get-points($polygon)
return {&quot;line-first-point&quot;: $line_list[0], &quot;line-second-point&quot;: $line_list[1], &quot;rectangle-left-bottom-point&quot;: $rectangle_list[0], &quot;rectangle-top-upper-point&quot;: $rectangle_list[1], &quot;polygon-first-point&quot;: $polygon_list[0], &quot;polygon-second-point&quot;: $polygon_list[1], &quot;polygon-third-point&quot;: $polygon_list[2], &quot;polygon-forth-point&quot;: $polygon_list[3]}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;line-first-point&quot;: point(&quot;100.6,99.4&quot;), &quot;line-second-point&quot;: point(&quot;-72.0,-76.9&quot;), &quot;rectangle-left-bottom-point&quot;: point(&quot;9.2,49.0&quot;), &quot;rectangle-top-upper-point&quot;: point(&quot;77.8,111.1&quot;), &quot;polygon-first-point&quot;: point(&quot;1.0,1.0&quot;), &quot;polygon-second-point&quot;: point(&quot;2.0,2.0&quot;), &quot;polygon-third-point&quot;: point(&quot;3.0,3.0&quot;), &quot;polygon-forth-point&quot;: point(&quot;4.0,4.0&quot;) }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="get-centerget-radius"></a>get-center/get-radius</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $circle := create-circle(create-point(6.0,3.0), 1.0)
return {&quot;circle-radius&quot;: get-radius($circle), &quot;circle-center&quot;: get-center($circle)}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;circle-radius&quot;: 1.0d, &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 class="source">
<div class="source">
<pre>spatial-distance(point_expression1, point_expression2)
</pre></div></div></li>
  
<li>
<p>Returns the Euclidean distance between <tt>point_expression1</tt> and <tt>point_expression2</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>point_expression1</tt> : A <tt>point</tt>.</li>
    
<li><tt>point_expression2</tt> : A <tt>point</tt>.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>A <tt>double</tt> as the Euclidean distance between <tt>point_expression1</tt> and <tt>point_expression2</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $t in dataset('TweetMessages')
let $d :=  spatial-distance($t.sender-location, create-point(30.0,70.0))
return {&quot;point&quot;: $t.sender-location, &quot;distance&quot;: $d}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;point&quot;: point(&quot;47.44,80.65&quot;), &quot;distance&quot;: 20.434678857275934d }
{ &quot;point&quot;: point(&quot;29.15,76.53&quot;), &quot;distance&quot;: 6.585089217315132d }
{ &quot;point&quot;: point(&quot;37.59,68.42&quot;), &quot;distance&quot;: 7.752709203884797d }
{ &quot;point&quot;: point(&quot;24.82,94.63&quot;), &quot;distance&quot;: 25.168816023007512d }
{ &quot;point&quot;: point(&quot;32.84,67.14&quot;), &quot;distance&quot;: 4.030533463451212d }
{ &quot;point&quot;: point(&quot;29.72,75.8&quot;), &quot;distance&quot;: 5.806754687430835d }
{ &quot;point&quot;: point(&quot;39.28,70.48&quot;), &quot;distance&quot;: 9.292405501268227d }
{ &quot;point&quot;: point(&quot;40.09,92.69&quot;), &quot;distance&quot;: 24.832321679617472d }
{ &quot;point&quot;: point(&quot;47.51,83.99&quot;), &quot;distance&quot;: 22.41250097601782d }
{ &quot;point&quot;: point(&quot;36.21,72.6&quot;), &quot;distance&quot;: 6.73231758015024d }
{ &quot;point&quot;: point(&quot;46.05,93.34&quot;), &quot;distance&quot;: 28.325926286707734d }
{ &quot;point&quot;: point(&quot;36.86,74.62&quot;), &quot;distance&quot;: 8.270671073135482d }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="spatial-area"></a>spatial-area</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $circleArea := spatial-area(create-circle(create-point(0.0,0.0), 5.0))
return {&quot;Area&quot;:$circleArea}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;Area&quot;: 78.53981625d }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="spatial-intersect"></a>spatial-intersect</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>spatial-intersect(spatial_expression1, spatial_expression2)
</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_expression1</tt> : A <tt>point</tt>, <tt>line</tt>, <tt>rectangle</tt>, <tt>circle</tt>, or <tt>polygon</tt>.</li>
    
<li><tt>spatial_expression2</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_expression1</tt> and <tt>spatial_expression2</tt> spatially overlap with each other.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $t in dataset('TweetMessages')
where spatial-intersect($t.sender-location, create-rectangle(create-point(30.0,70.0), create-point(40.0,80.0)))
return $t
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;tweetid&quot;: &quot;4&quot;, &quot;user&quot;: { &quot;screen-name&quot;: &quot;NathanGiesen@211&quot;, &quot;lang&quot;: &quot;en&quot;, &quot;friends_count&quot;: 39339, &quot;statuses_count&quot;: 473, &quot;name&quot;: &quot;Nathan Giesen&quot;, &quot;followers_count&quot;: 49416 }, &quot;sender-location&quot;: point(&quot;39.28,70.48&quot;), &quot;send-time&quot;: datetime(&quot;2011-12-26T10:10:00.000Z&quot;), &quot;referred-topics&quot;: {{ &quot;sprint&quot;, &quot;voice-command&quot; }}, &quot;message-text&quot;: &quot; like sprint the voice-command is mind-blowing:)&quot; }
{ &quot;tweetid&quot;: &quot;7&quot;, &quot;user&quot;: { &quot;screen-name&quot;: &quot;ChangEwing_573&quot;, &quot;lang&quot;: &quot;en&quot;, &quot;friends_count&quot;: 182, &quot;statuses_count&quot;: 394, &quot;name&quot;: &quot;Chang Ewing&quot;, &quot;followers_count&quot;: 32136 }, &quot;sender-location&quot;: point(&quot;36.21,72.6&quot;), &quot;send-time&quot;: datetime(&quot;2011-08-25T10:10:00.000Z&quot;), &quot;referred-topics&quot;: {{ &quot;samsung&quot;, &quot;platform&quot; }}, &quot;message-text&quot;: &quot; like samsung the platform is good&quot; }
{ &quot;tweetid&quot;: &quot;9&quot;, &quot;user&quot;: { &quot;screen-name&quot;: &quot;NathanGiesen@211&quot;, &quot;lang&quot;: &quot;en&quot;, &quot;friends_count&quot;: 39339, &quot;statuses_count&quot;: 473, &quot;name&quot;: &quot;Nathan Giesen&quot;, &quot;followers_count&quot;: 49416 }, &quot;sender-location&quot;: point(&quot;36.86,74.62&quot;), &quot;send-time&quot;: datetime(&quot;2012-07-21T10:10:00.000Z&quot;), &quot;referred-topics&quot;: {{ &quot;verizon&quot;, &quot;voicemail-service&quot; }}, &quot;message-text&quot;: &quot; love verizon its voicemail-service is awesome&quot; }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="spatial-cell"></a>spatial-cell</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>spatial-cell(point_expression1, point_expression2, x_increment, y_increment)
</pre></div></div></li>
  
<li>
<p>Returns the grid cell that <tt>point_expression1</tt> belongs to.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>point_expression1</tt> : A <tt>point</tt> representing the point of interest that its grid cell will be returned.</li>
    
<li><tt>point_expression2</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>point_expression1</tt> belongs to.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $t in dataset('TweetMessages')
group by $c :=  spatial-cell($t.sender-location, create-point(20.0,50.0), 5.5, 6.0) with $t
let $num :=  count($t)
return { &quot;cell&quot;: $c, &quot;count&quot;: $num}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;cell&quot;: rectangle(&quot;20.0,92.0 25.5,98.0&quot;), &quot;count&quot;: 1i64 }
{ &quot;cell&quot;: rectangle(&quot;25.5,74.0 31.0,80.0&quot;), &quot;count&quot;: 2i64 }
{ &quot;cell&quot;: rectangle(&quot;31.0,62.0 36.5,68.0&quot;), &quot;count&quot;: 1i64 }
{ &quot;cell&quot;: rectangle(&quot;31.0,68.0 36.5,74.0&quot;), &quot;count&quot;: 1i64 }
{ &quot;cell&quot;: rectangle(&quot;36.5,68.0 42.0,74.0&quot;), &quot;count&quot;: 2i64 }
{ &quot;cell&quot;: rectangle(&quot;36.5,74.0 42.0,80.0&quot;), &quot;count&quot;: 1i64 }
{ &quot;cell&quot;: rectangle(&quot;36.5,92.0 42.0,98.0&quot;), &quot;count&quot;: 1i64 }
{ &quot;cell&quot;: rectangle(&quot;42.0,80.0 47.5,86.0&quot;), &quot;count&quot;: 1i64 }
{ &quot;cell&quot;: rectangle(&quot;42.0,92.0 47.5,98.0&quot;), &quot;count&quot;: 1i64 }
{ &quot;cell&quot;: rectangle(&quot;47.5,80.0 53.0,86.0&quot;), &quot;count&quot;: 1i64 }
</pre></div></div></li>
</ul></div></div>
<div class="section">
<h2><a name="Similarity_Functions_Back_to_TOC"></a><a name="SimilarityFunctions" id="SimilarityFunctions">Similarity Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></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 class="source">
<div class="source">
<pre>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>OrderedList</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>int64</tt> that represents the edit distance between <tt>expression1</tt> and <tt>expression2</tt>.</li>
  </ul></li>
  
<li>Note: An <a href="similarity.html#UsingIndexesToSupportSimilarityQueries">n-gram index</a> can be utilized for this function.</li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $user in dataset('FacebookUsers')
let $ed := edit-distance($user.name, &quot;Suzanna Tilson&quot;)
where $ed &lt;= 2
return $user
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{
&quot;id&quot;: 7, &quot;alias&quot;: &quot;Suzanna&quot;, &quot;name&quot;: &quot;SuzannaTillson&quot;, &quot;user-since&quot;: datetime(&quot;2012-08-07T10:10:00.000Z&quot;), &quot;friend-ids&quot;: {{ 6 }},
&quot;employment&quot;: [ { &quot;organization-name&quot;: &quot;Labzatron&quot;, &quot;start-date&quot;: date(&quot;2011-04-19&quot;), &quot;end-date&quot;: null } ]
}
</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 class="source">
<div class="source">
<pre>edit-distance-check(expression1, expression2, threshold)
</pre></div></div></li>
  
<li>
<p>Checks whether <tt>expression1</tt> and <tt>expression2</tt> have an <a class="externalLink" href="http://en.wikipedia.org/wiki/Levenshtein_distance">edit distance</a> within a given threshold. The &#x201c;check&#x201d; version of edit distance is faster than the &#x201c;non-check&#x201d; version because the former can detect whether two items satisfy a given threshold using early-termination techniques, as opposed to computing their real distance. Although possible, it is not necessary for the user to write queries using the &#x201c;check&#x201d; versions explicitly, since a rewrite rule can perform an appropriate transformation from a &#x201c;non-check&#x201d; version to a &#x201c;check&#x201d; version.</p></li>
  
<li>
<p>Arguments:</p>
  
<ul>
    
<li><tt>expression1</tt> : A <tt>string</tt> or a homogeneous <tt>OrderedList</tt> of a comparable item type.</li>
    
<li><tt>expression2</tt> : The same type as <tt>expression1</tt>.</li>
    
<li><tt>threshold</tt> : An <tt>int64</tt> that represents the distance threshold.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>OrderedList</tt> with two items:
    
<ul>
      
<li>The first item contains a <tt>boolean</tt> value representing whether <tt>expression1</tt> and <tt>expression2</tt> are similar.</li>
      
<li>The second item contains an <tt>int64</tt> that represents the edit distance of <tt>expression1</tt> and <tt>expression2</tt> if it is within the threshold, or 0 otherwise.</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>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $user in dataset('FacebookUsers')
let $ed := edit-distance-check($user.name, &quot;Suzanna Tilson&quot;, 2)
where $ed[0]
return $ed[1]
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>2
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="edit-distance-contains"></a>edit-distance-contains</h3>

<ul>
  
<li>Syntax:</li>
</ul>
<p>edit-distance-contains(expression1, expression2, threshold)</p>

<ul>
  
<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>OrderedList</tt> of a comparable item type.</li>
    
<li><tt>expression2</tt> : The same type as <tt>expression1</tt>.</li>
    
<li><tt>threshold</tt> : An <tt>int32</tt> that represents the distance threshold.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>OrderedList</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>int32</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>
  </ul></li>
  
<li>Note: An <a href="similarity.html#UsingIndexesToSupportSimilarityQueries">n-gram index</a> can be utilized for this function.</li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $i := edit-distance-contains(&quot;happy&quot;,&quot;hapr&quot;,2)
return $i;
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>[ 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 class="source">
<div class="source">
<pre>similarity-jaccard(list_expression1, list_expression2)
</pre></div></div></li>
  
<li>
<p>Returns the <a class="externalLink" href="http://en.wikipedia.org/wiki/Jaccard_index">Jaccard similarity</a> of <tt>list_expression1</tt> and <tt>list_expression2</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>list_expression1</tt> : An <tt>UnorderedList</tt> or <tt>OrderedList</tt>.</li>
    
<li><tt>list_expression2</tt> : An <tt>UnorderedList</tt> or <tt>OrderedList</tt>.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>A <tt>float</tt> that represents the Jaccard similarity of <tt>list_expression1</tt> and <tt>list_expression2</tt>.</li>
  </ul></li>
  
<li>Note: A <a href="similarity.html#UsingIndexesToSupportSimilarityQueries">keyword index</a> can be utilized for this function.</li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $user in dataset('FacebookUsers')
let $sim := similarity-jaccard($user.friend-ids, [1,5,9,10])
where $sim &gt;= 0.6f
return $user
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{
&quot;id&quot;: 3, &quot;alias&quot;: &quot;Emory&quot;, &quot;name&quot;: &quot;EmoryUnk&quot;, &quot;user-since&quot;: datetime(&quot;2012-07-10T10:10:00.000Z&quot;), &quot;friend-ids&quot;: {{ 1, 5, 8, 9 }},
&quot;employment&quot;: [ { &quot;organization-name&quot;: &quot;geomedia&quot;, &quot;start-date&quot;: date(&quot;2010-06-17&quot;), &quot;end-date&quot;: date(&quot;2010-01-26&quot;) } ]
}
{
&quot;id&quot;: 10, &quot;alias&quot;: &quot;Bram&quot;, &quot;name&quot;: &quot;BramHatch&quot;, &quot;user-since&quot;: datetime(&quot;2010-10-16T10:10:00.000Z&quot;), &quot;friend-ids&quot;: {{ 1, 5, 9 }},
&quot;employment&quot;: [ { &quot;organization-name&quot;: &quot;physcane&quot;, &quot;start-date&quot;: date(&quot;2007-06-05&quot;), &quot;end-date&quot;: date(&quot;2011-11-05&quot;) } ]
}
</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 class="source">
<div class="source">
<pre>similarity-jaccard-check(list_expression1, list_expression2, threshold)
</pre></div></div></li>
  
<li>
<p>Checks whether <tt>list_expression1</tt> and <tt>list_expression2</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>list_expression1</tt> : An <tt>UnorderedList</tt> or <tt>OrderedList</tt>.</li>
    
<li><tt>list_expression2</tt> : An <tt>UnorderedList</tt> or <tt>OrderedList</tt>.</li>
    
<li><tt>threshold</tt> : A <tt>float</tt> that represents the similarity threshold.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>OrderedList</tt> with two items:</li>
    
<li>The first item contains a <tt>boolean</tt> value representing whether <tt>list_expression1</tt> and <tt>list_expression2</tt> are similar.</li>
    
<li>The second item contains a <tt>float</tt> that represents the Jaccard similarity of <tt>list_expression1</tt> and <tt>list_expression2</tt> if it is greater than or equal to the threshold, or 0 otherwise.</li>
  </ul></li>
  
<li>Note: A <a href="similarity.html#UsingIndexesToSupportSimilarityQueries">keyword index</a> can be utilized for this function.</li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $user in dataset('FacebookUsers')
let $sim := similarity-jaccard-check($user.friend-ids, [1,5,9,10], 0.6f)
where $sim[0]
return $sim[1]
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>0.75f
1.0f
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="Similarity_Operator_"></a>Similarity Operator ~=</h3>

<ul>
  
<li>&#x201c;<tt>~=</tt>&#x201d; is syntactic sugar for expressing a similarity condition with a given similarity threshold.</li>
  
<li>The similarity function and threshold for &#x201c;<tt>~=</tt>&#x201d; are controlled via &#x201c;set&#x201d; directives.</li>
  
<li>The &#x201c;<tt>~=</tt>&#x201d; operator returns a <tt>boolean</tt> value that represents whether the operands are similar.</li>
  
<li>
<p>Example for Jaccard similarity:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

set simfunction &quot;jaccard&quot;;
set simthreshold &quot;0.6f&quot;;

for $user in dataset('FacebookUsers')
where $user.friend-ids ~= [1,5,9,10]
return $user
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{
&quot;id&quot;: 3, &quot;alias&quot;: &quot;Emory&quot;, &quot;name&quot;: &quot;EmoryUnk&quot;, &quot;user-since&quot;: datetime(&quot;2012-07-10T10:10:00.000Z&quot;), &quot;friend-ids&quot;: {{ 1, 5, 8, 9 }},
&quot;employment&quot;: [ { &quot;organization-name&quot;: &quot;geomedia&quot;, &quot;start-date&quot;: date(&quot;2010-06-17&quot;), &quot;end-date&quot;: date(&quot;2010-01-26&quot;) } ]
}
{
&quot;id&quot;: 10, &quot;alias&quot;: &quot;Bram&quot;, &quot;name&quot;: &quot;BramHatch&quot;, &quot;user-since&quot;: datetime(&quot;2010-10-16T10:10:00.000Z&quot;), &quot;friend-ids&quot;: {{ 1, 5, 9 }},
&quot;employment&quot;: [ { &quot;organization-name&quot;: &quot;physcane&quot;, &quot;start-date&quot;: date(&quot;2007-06-05&quot;), &quot;end-date&quot;: date(&quot;2011-11-05&quot;) } ]
}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>Example for edit-distance similarity:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

set simfunction &quot;edit-distance&quot;;
set simthreshold &quot;2&quot;;

for $user in dataset('FacebookUsers')
where $user.name ~= &quot;Suzanna Tilson&quot;
return $user
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected output is:</p>
  
<div class="source">
<div class="source">
<pre>{
&quot;id&quot;: 7, &quot;alias&quot;: &quot;Suzanna&quot;, &quot;name&quot;: &quot;SuzannaTillson&quot;, &quot;user-since&quot;: datetime(&quot;2012-08-07T10:10:00.000Z&quot;), &quot;friend-ids&quot;: {{ 6 }},
&quot;employment&quot;: [ { &quot;organization-name&quot;: &quot;Labzatron&quot;, &quot;start-date&quot;: date(&quot;2011-04-19&quot;), &quot;end-date&quot;: null } ]
}
</pre></div></div></li>
</ul></div></div>
<div class="section">
<h2><a name="Tokenizing_Functions_Back_to_TOC"></a><a name="TokenizingFunctions" id="TokenizingFunctions">Tokenizing Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
<div class="section">
<h3><a name="word-tokens"></a>word-tokens</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>word-tokens(string_expression)
</pre></div></div></li>
  
<li>
<p>Returns a list of word tokens of <tt>string_expression</tt> using non-alphanumeric characters as delimiters.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression</tt> : A <tt>string</tt> that will be tokenized.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>OrderedList</tt> of <tt>string</tt> word tokens.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $t in dataset('TweetMessages')
let $tokens := word-tokens($t.message-text)
where $t.send-time &gt;= datetime('2012-01-01T00:00:00')
return {
&quot;tweetid&quot;: $t.tweetid,
&quot;word-tokens&quot;: $tokens
}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;tweetid&quot;: &quot;9&quot;, &quot;word-tokens&quot;: [ &quot;love&quot;, &quot;verizon&quot;, &quot;its&quot;, &quot;voicemail&quot;, &quot;service&quot;, &quot;is&quot;, &quot;awesome&quot; ] }
</pre></div></div></li>
</ul>
<!-- ### hashed-word-tokens ###
 * Syntax:

        hashed-word-tokens(string_expression)

 * Returns a list of hashed word tokens of `string_expression`.
 * Arguments:
    * `string_expression` : A `string` that will be tokenized.
 * Return Value:
   * An `OrderedList` of `int32` hashed tokens.

 * Example:

        use dataverse TinySocial;

        for $t in dataset('TweetMessages')
        let $tokens := hashed-word-tokens($t.message-text)
        where $t.send-time >= datetime('2012-01-01T00:00:00')
        return {
        "tweetid": $t.tweetid,
        "hashed-word-tokens": $tokens
        }


 * The expected result is:

        { "tweetid": "9", "hashed-word-tokens": [ -1217719622, -447857469, -1884722688, -325178649, 210976949, 285049676, 1916743959 ] }


### counthashed-word-tokens ###
 * Syntax:

        counthashed-word-tokens(string_expression)

 * Returns a list of hashed word tokens of `string_expression`. The hashing mechanism gives duplicate tokens different hash values, based on the occurrence count of that token.
 * Arguments:
    * `string_expression` : A `String` that will be tokenized.
 * Return Value:
    * An `OrderedList` of `Int32` hashed tokens.
 * Example:

        use dataverse TinySocial;

        for $t in dataset('TweetMessages')
        let $tokens := counthashed-word-tokens($t.message-text)
        where $t.send-time >= datetime('2012-01-01T00:00:00')
        return {
        "tweetid": $t.tweetid,
        "counthashed-word-tokens": $tokens
        }


 * The expected result is:

        { "tweetid": "9", "counthashed-word-tokens": [ -1217719622, -447857469, -1884722688, -325178649, 210976949, 285049676, 1916743959 ] }


### gram-tokens ###
 * Syntax:

        gram-tokens(string_expression, gram_length, boolean_expression)

 * Returns a list of gram tokens of `string_expression`, which can be obtained by scanning the characters using a sliding window of a fixed length.
 * Arguments:
    * `string_expression` : A `String` that will be tokenized.
    * `gram_length` : An `Int32` as the length of grams.
   * `boolean_expression` : A `Boolean` value to indicate whether to generate additional grams by pre- and postfixing `string_expression` with special characters.
 * Return Value:
    * An `OrderedList` of String gram tokens.

 * Example:

        use dataverse TinySocial;

        for $t in dataset('TweetMessages')
        let $tokens := gram-tokens($t.message-text, 3, true)
        where $t.send-time >= datetime('2012-01-01T00:00:00')
        return {
        "tweetid": $t.tweetid,
        "gram-tokens": $tokens
        }


 * The expected result is:

        {
        "tweetid": "9",
        "gram-tokens": [ "## ", "# l", " lo", "lov", "ove", "ve ", "e v", " ve", "ver", "eri", "riz", "izo", "zon", "on ", "n i", " it", "its", "ts ", "s v", " vo", "voi", "oic", "ice",
        "cem", "ema", "mai", "ail", "il-", "l-s", "-se", "ser", "erv", "rvi", "vic", "ice", "ce ", "e i", " is", "is ", "s a", " aw", "awe", "wes", "eso", "som", "ome", "me$", "e$$" ]
        }


### hashed-gram-tokens ###
 * Syntax:

        hashed-gram-tokens(string_expression, gram_length, boolean_expression)

 * Returns a list of hashed gram tokens of `string_expression`.
 * Arguments:
    * `string_expression` : A `String` that will be tokenized.
    * `gram_length` : An `Int32` as the length of grams.
    * `boolean_expression` : A `Boolean` to indicate whether to generate additional grams by pre- and postfixing `string_expression` with special characters.
 * Return Value:
    * An `OrderedList` of `Int32` hashed gram tokens.

 * Example:

        use dataverse TinySocial;

        for $t in dataset('TweetMessages')
        let $tokens := hashed-gram-tokens($t.message-text, 3, true)
        where $t.send-time >= datetime('2012-01-01T00:00:00')
        return {
        "tweetid": $t.tweetid,
        "hashed-gram-tokens": $tokens
        }


 * The expected result is:

        {
        "tweetid": "9",
        "hashed-gram-tokens": [ 40557178, -2002241593, 161665899, -856104603, -500544946, 693410611, 395674299, -1015235909, 1115608337, 1187999872, -31006095, -219180466, -1676061637,
        1040194153, -1339307841, -1527110163, -1884722688, -179148713, -431014627, -1789789823, -1209719926, 684519765, -486734513, 1734740619, -1971673751, -932421915, -2064668066,
        -937135958, -790946468, -69070309, 1561601454, 26169001, -160734571, 1330043462, -486734513, -18796768, -470303314, 113421364, 1615760212, 1688217556, 1223719184, 536568131,
        1682609873, 2935161, -414769471, -1027490137, 1602276102, 1050490461 ]
        }


### counthashed-gram-tokens ###
 * Syntax:

        counthashed-gram-tokens(string_expression, gram_length, boolean_expression)

 * Returns a list of hashed gram tokens of `string_expression`. The hashing mechanism gives duplicate tokens different hash values, based on the occurrence count of that token.
 * Arguments:
    * `string_expression` : A `String` that will be tokenized.
    * `gram_length` : An `Int32`, length of grams to generate.
    * `boolean_expression` : A `Boolean`, whether to generate additional grams by pre- and postfixing `string_expression` with special characters.
 * Return Value:
    * An `OrderedList` of `Int32` hashed gram tokens.

 * Example:

        use dataverse TinySocial;

        for $t in dataset('TweetMessages')
        let $tokens := counthashed-gram-tokens($t.message-text, 3, true)
        where $t.send-time >= datetime('2012-01-01T00:00:00')
        return {
        "tweetid": $t.tweetid,
        "counthashed-gram-tokens": $tokens
        }


 * The expected result is:

        {
        "tweetid": "9",
        "counthashed-gram-tokens": [ 40557178, -2002241593, 161665899, -856104603, -500544946, 693410611, 395674299, -1015235909, 1115608337, 1187999872, -31006095, -219180466, -1676061637,
        1040194153, -1339307841, -1527110163, -1884722688, -179148713, -431014627, -1789789823, -1209719926, 684519765, -486734513, 1734740619, -1971673751, -932421915, -2064668066, -937135958,
        -790946468, -69070309, 1561601454, 26169001, -160734571, 1330043462, -486734512, -18796768, -470303314, 113421364, 1615760212, 1688217556, 1223719184, 536568131, 1682609873, 2935161,
        -414769471, -1027490137, 1602276102, 1050490461 ]
        } --></div></div>
<div class="section">
<h2><a name="Temporal_Functions_Back_to_TOC"></a><a name="TemporalFunctions" id="TemporalFunctions">Temporal Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
<div class="section">
<h3><a name="get-yearget-monthget-dayget-hourget-minuteget-secondget-millisecond"></a>get-year/get-month/get-day/get-hour/get-minute/get-second/get-millisecond</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>get-year/get-month/get-day/get-hour/get-minute/get-second/get-millisecond(temporal_expression)
</pre></div></div></li>
  
<li>
<p>Accessors for accessing fields in a temporal value</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>temporal_expression</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>int64</tt> value representing the field to be extracted.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $c1 := date(&quot;2010-10-30&quot;)
let $c2 := datetime(&quot;1987-11-19T23:49:23.938&quot;)
let $c3 := time(&quot;12:23:34.930+07:00&quot;)
let $c4 := duration(&quot;P3Y73M632DT49H743M3948.94S&quot;)

return {&quot;year&quot;: get-year($c1), &quot;month&quot;: get-month($c2), &quot;day&quot;: get-day($c1), &quot;hour&quot;: get-hour($c3), &quot;min&quot;: get-minute($c4), &quot;second&quot;: get-second($c2), &quot;ms&quot;: get-millisecond($c4)}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &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 class="source">
<div class="source">
<pre>adjust-datetime-for-timezone(datetime_expression, string_expression)
</pre></div></div></li>
  
<li>
<p>Adjusts the given datetime <tt>datetime_expression</tt> by applying the timezone information <tt>string_expression</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>datetime_expression</tt> : A <tt>datetime</tt> value to be adjusted.</li>
    
<li><tt>string_expression</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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('TweetMessages')
return {&quot;adjusted-send-time&quot;: adjust-datetime-for-timezone($i.send-time, &quot;+08:00&quot;), &quot;message&quot;: $i.message-text}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;adjusted-send-time&quot;: &quot;2008-04-26T18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; love t-mobile its customization is good:)&quot; }
{ &quot;adjusted-send-time&quot;: &quot;2010-05-13T18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like verizon its shortcut-menu is awesome:)&quot; }
{ &quot;adjusted-send-time&quot;: &quot;2006-11-04T18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like motorola the speed is good:)&quot; }
{ &quot;adjusted-send-time&quot;: &quot;2011-12-26T18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like sprint the voice-command is mind-blowing:)&quot; }
{ &quot;adjusted-send-time&quot;: &quot;2006-08-04T18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; can't stand motorola its speed is terrible:(&quot; }
{ &quot;adjusted-send-time&quot;: &quot;2010-05-07T18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like iphone the voice-clarity is good:)&quot; }
{ &quot;adjusted-send-time&quot;: &quot;2011-08-25T18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like samsung the platform is good&quot; }
{ &quot;adjusted-send-time&quot;: &quot;2005-10-14T18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like t-mobile the shortcut-menu is awesome:)&quot; }
{ &quot;adjusted-send-time&quot;: &quot;2012-07-21T18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; love verizon its voicemail-service is awesome&quot; }
{ &quot;adjusted-send-time&quot;: &quot;2008-01-26T18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; hate verizon its voice-clarity is OMG:(&quot; }
{ &quot;adjusted-send-time&quot;: &quot;2008-03-09T18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; can't stand iphone its platform is terrible&quot; }
{ &quot;adjusted-send-time&quot;: &quot;2010-02-13T18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like samsung the voice-command is amazing:)&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 class="source">
<div class="source">
<pre>adjust-time-for-timezone(time_expression, string_expression)
</pre></div></div></li>
  
<li>
<p>Adjusts the given time <tt>time_expression</tt> by applying the timezone information <tt>string_expression</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>time_expression</tt> : A <tt>time</tt> value to be adjusted.</li>
    
<li><tt>string_expression</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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('TweetMessages')
return {&quot;adjusted-send-time&quot;: adjust-time-for-timezone(time-from-datetime($i.send-time), &quot;+08:00&quot;), &quot;message&quot;: $i.message-text}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;adjusted-send-time&quot;: &quot;18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; love t-mobile its customization is good:)&quot; }
{ &quot;adjusted-send-time&quot;: &quot;18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like verizon its shortcut-menu is awesome:)&quot; }
{ &quot;adjusted-send-time&quot;: &quot;18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like motorola the speed is good:)&quot; }
{ &quot;adjusted-send-time&quot;: &quot;18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like sprint the voice-command is mind-blowing:)&quot; }
{ &quot;adjusted-send-time&quot;: &quot;18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; can't stand motorola its speed is terrible:(&quot; }
{ &quot;adjusted-send-time&quot;: &quot;18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like iphone the voice-clarity is good:)&quot; }
{ &quot;adjusted-send-time&quot;: &quot;18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like samsung the platform is good&quot; }
{ &quot;adjusted-send-time&quot;: &quot;18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like t-mobile the shortcut-menu is awesome:)&quot; }
{ &quot;adjusted-send-time&quot;: &quot;18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; love verizon its voicemail-service is awesome&quot; }
{ &quot;adjusted-send-time&quot;: &quot;18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; hate verizon its voice-clarity is OMG:(&quot; }
{ &quot;adjusted-send-time&quot;: &quot;18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; can't stand iphone its platform is terrible&quot; }
{ &quot;adjusted-send-time&quot;: &quot;18:10:00.000+08:00&quot;, &quot;message&quot;: &quot; like samsung the voice-command is amazing:)&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 class="source">
<div class="source">
<pre>calendar-duration-from-datetime(datetime_expression, duration_expression)
</pre></div></div></li>
  
<li>
<p>Gets a user-friendly representation of the duration <tt>duration_expression</tt> based on the given datetime <tt>datetime_expression</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>datetime_expression</tt> : A <tt>datetime</tt> value to be used as the reference time point.</li>
    
<li><tt>duration_expression</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_expression</tt> but with a user-friendly representation.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('TweetMessages')
where $i.send-time &gt; datetime(&quot;2011-01-01T00:00:00&quot;)
return {&quot;since-2011&quot;: subtract-datetime($i.send-time, datetime(&quot;2011-01-01T00:00:00&quot;)), &quot;since-2011-user-friendly&quot;: calendar-duration-from-datetime($i.send-time, subtract-datetime($i.send-time, datetime(&quot;2011-01-01T00:00:00&quot;)))}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;since-2011&quot;: duration(&quot;P359DT10H10M&quot;), &quot;since-2011-user-friendly&quot;: duration(&quot;P11M23DT10H10M&quot;) }
{ &quot;since-2011&quot;: duration(&quot;P236DT10H10M&quot;), &quot;since-2011-user-friendly&quot;: duration(&quot;P7M23DT10H10M&quot;) }
{ &quot;since-2011&quot;: duration(&quot;P567DT10H10M&quot;), &quot;since-2011-user-friendly&quot;: duration(&quot;P1Y6M18DT10H10M&quot;) }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="get-year-month-durationget-day-time-duration"></a>get-year-month-duration/get-day-time-duration</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>get-year-month-duration/get-day-time-duration(duration_expression)
</pre></div></div></li>
  
<li>
<p>Extracts the correct <tt>duration</tt> subtype from <tt>duration_expression</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>duration_expression</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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $i := get-year-month-duration(duration(&quot;P12M50DT10H&quot;))
return $i;
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>year-month-duration(&quot;P1Y&quot;)
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="months-from-year-month-durationmilliseconds-from-day-time-duration"></a>months-from-year-month-duration/milliseconds-from-day-time-duration</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>months-from-year-month-duration/milliseconds-from-day-time-duration(duration_expression)
</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_expression</tt> : A <tt>duration</tt> of the correct subtype.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>int64</tt> representing the number or months/milliseconds.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $i := months-from-year-month-duration(get-year-month-duration(duration(&quot;P5Y7MT50M&quot;)))
return $i;
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>67
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="duration-from-monthsduration-from-ms"></a>duration-from-months/duration-from-ms</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>duration-from-months/duration-from-ms(number_expression)
</pre></div></div></li>
  
<li>
<p>Creates a <tt>duration</tt> from <tt>number_expression</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>number_expression</tt> : An <tt>int64</tt> representing the number of months/milliseconds</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>A <tt>duration</tt> containing <tt>number_expression</tt> value for months/milliseconds</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $i := duration-from-months(8)
return $i;
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>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 class="source">
<div class="source">
<pre>duration-from-interval(interval_expression)
</pre></div></div></li>
  
<li>
<p>Creates a <tt>duration</tt> from <tt>interval_expression</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>interval_expression</tt> : An <tt>interval</tt> value</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>A <tt>duration</tt> repesenting the time in the <tt>interval_expression</tt></li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $itv1 := interval-from-date(&quot;2010-10-30&quot;, &quot;2010-12-21&quot;)
let $itv2 := interval-from-datetime(&quot;2012-06-26T01:01:01.111&quot;, &quot;2012-07-27T02:02:02.222&quot;)
let $itv3 := interval-from-time(&quot;12:32:38&quot;, &quot;20:29:20&quot;)

return { &quot;dr1&quot; : duration-from-interval($itv1),
  &quot;dr2&quot; : duration-from-interval($itv2),
  &quot;dr3&quot; : duration-from-interval($itv3),
  &quot;dr4&quot; : duration-from-interval(null) }
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &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 class="source">
<div class="source">
<pre>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 class="source">
<div class="source">
<pre>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 class="source">
<div class="source">
<pre>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>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>{&quot;current-date&quot;: current-date(),
&quot;current-time&quot;: current-time(),
&quot;current-datetime&quot;: current-datetime()}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;current-date&quot;: date(&quot;2013-04-06&quot;),
&quot;current-time&quot;: time(&quot;00:48:44.093Z&quot;),
&quot;current-datetime&quot;: datetime(&quot;2013-04-06T00:48:44.093Z&quot;) }
</pre></div></div></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 class="source">
<div class="source">
<pre>get-date-from-datetime(datetime_expression)
</pre></div></div></li>
  
<li>
<p>Gets the date value from the given datetime value <tt>datetime_expression</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>datetime_expression</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>
  </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 class="source">
<div class="source">
<pre>get-time-from-datetime(datetime_expression)
</pre></div></div></li>
  
<li>
<p>Get the time value from the given datetime value <tt>datetime_expression</tt></p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>datetime_expression</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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

for $i in dataset('TweetMessages')
where $i.send-time &gt; datetime(&quot;2011-01-01T00:00:00&quot;)
return {&quot;send-date&quot;: get-date-from-datetime($i.send-time), &quot;send-time&quot;: get-time-from-datetime($i.send-time)}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;send-date&quot;: date(&quot;2011-12-26&quot;), &quot;send-time&quot;: time(&quot;10:10:00.000Z&quot;) }
{ &quot;send-date&quot;: date(&quot;2011-08-25&quot;), &quot;send-time&quot;: time(&quot;10:10:00.000Z&quot;) }
{ &quot;send-date&quot;: date(&quot;2012-07-21&quot;), &quot;send-time&quot;: 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 class="source">
<div class="source">
<pre>day-of-week(date_expression)
</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_expression</tt>: A <tt>date</tt> value (Can also be a <tt>datetime</tt>)</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>int8</tt> representing the day of the week (1-7)</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $i := day-of-week( datetime(&quot;2012-12-30T12:12:12.039Z&quot;))
return $i;
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>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 class="source">
<div class="source">
<pre>date-from-unix-time-in-days(numeric_expression)
</pre></div></div></li>
  
<li>
<p>Gets a date representing the time after <tt>numeric_expression</tt> days since 1970-01-01.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>numeric_expression</tt>: A <tt>int8</tt>/<tt>int16</tt>/<tt>int32</tt>/<tt>int64</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_expression</tt> days since 1970-01-01.</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 class="source">
<div class="source">
<pre>datetime-from-unix-time-in-ms(numeric_expression)
</pre></div></div></li>
  
<li>
<p>Gets a datetime representing the time after <tt>numeric_expression</tt> milliseconds since 1970-01-01T00:00:00Z.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>numeric_expression</tt>: A <tt>int8</tt>/<tt>int16</tt>/<tt>int32</tt>/<tt>int64</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_expression</tt> milliseconds since 1970-01-01T00:00:00Z.</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 class="source">
<div class="source">
<pre>datetime-from-unix-time-in-secs(numeric_expression)
</pre></div></div></li>
  
<li>
<p>Gets a datetime representing the time after <tt>numeric_expression</tt> seconds since 1970-01-01T00:00:00Z.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>numeric_expression</tt>: A <tt>int8</tt>/<tt>int16</tt>/<tt>int32</tt>/<tt>int64</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_expression</tt> seconds since 1970-01-01T00:00:00Z.</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_expression,time_expression)</p>

<ul>
  
<li>Gets a datetime representing the combination of <tt>date_expression</tt> and <tt>time_expression</tt>
  
<ul>
    
<li>Arguments:</li>
    
<li><tt>date_expression</tt>: A <tt>date</tt> value</li>
    
<li><tt>time_expression</tt> A <tt>time</tt> value</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>A <tt>datetime</tt> value by combining <tt>date_expression</tt> and <tt>time_expression</tt></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 class="source">
<div class="source">
<pre>time-from-unix-time-in-ms(numeric_expression)
</pre></div></div></li>
  
<li>
<p>Gets a time representing the time after <tt>numeric_expression</tt> milliseconds since 00:00:00.000Z.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>numeric_expression</tt>: A <tt>int8</tt>/<tt>int16</tt>/<tt>int32</tt>/<tt>int64</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_expression</tt> milliseconds since 00:00:00.000Z.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $d := date-from-unix-time-in-days(15800)
let $dt := datetime-from-unix-time-in-ms(1365139700000)
let $t := time-from-unix-time-in-ms(3748)
return {&quot;date&quot;: $d, &quot;datetime&quot;: $dt, &quot;time&quot;: $t}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &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-dateparse-timeparse-datetime"></a>parse-date/parse-time/parse-datetime</h3>

<ul>
  
<li>Syntax:</li>
</ul>
<p>parse-date/parse-time/parse-datetime(date_expression,formatting_expression)</p>

<ul>
  
<li>Creates a <tt>date/time/date-time</tt> value by treating <tt>date_expression</tt> with formatting <tt>formatting_expression</tt></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>date_expression</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_expression</tt></li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $i := parse-time(&quot;30:30&quot;,&quot;m:s&quot;)
return $i;
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>time(&quot;00:30:30.000Z&quot;)
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="print-dateprint-timeprint-datetime"></a>print-date/print-time/print-datetime</h3>

<ul>
  
<li>Syntax:</li>
</ul>
<p>print-date/print-time/print-datetime(date_expression,formatting_expression)</p>

<ul>
  
<li>Creates a <tt>string</tt> representing a <tt>date/time/date-time</tt> value of the <tt>date_expression</tt> using the formatting <tt>formatting_expression</tt></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>date_expression</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_expression</tt></li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $i := print-time(time(&quot;00:30:30.000Z&quot;),&quot;m:s&quot;)
return $i;
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot;30:30&quot;
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="get-interval-start_get-interval-end"></a>get-interval-start, get-interval-end</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $itv := interval-start-from-date(&quot;1984-01-01&quot;, &quot;P1Y&quot;)
return {&quot;start&quot;: get-interval-start($itv), &quot;end&quot;: get-interval-end($itv)}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &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-dateget-interval-start-datetimeget-interval-start-time_get-interval-end-dateget-interval-end-datetimeget-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 class="source">
<div class="source">
<pre>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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $itv1 := interval-start-from-date(&quot;1984-01-01&quot;, &quot;P1Y&quot;)
let $itv2 := interval-start-from-datetime(&quot;1984-01-01T08:30:00.000&quot;, &quot;P1Y1H&quot;)
let $itv3 := interval-start-from-time(&quot;08:30:00.000&quot;, &quot;P1H&quot;)
return {&quot;start&quot;: get-interval-start-date($itv1), &quot;end&quot;: get-interval-end-date($itv1), &quot;start&quot;: get-interval-start-datetime($itv2), &quot;end&quot;: get-interval-end-datetime($itv2), &quot;start&quot;: get-interval-start-time($itv3), &quot;end&quot;: get-interval-end-time($itv3)}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;start&quot;: date(&quot;1984-01-01&quot;), &quot;end&quot;: date(&quot;1985-01-01&quot;), &quot;start&quot;: datetime(&quot;1984-01-01T08:30:00.000&quot;), &quot;end&quot;: datetime(&quot;1984-02-01T09:30:00.000&quot;), &quot;start&quot;: date(&quot;08:30:00.000&quot;), &quot;end&quot;: time(&quot;09:30:00.000&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 class="source">
<div class="source">
<pre>get-overlapping-interval(interval_expression_1, interval_expression_2)
</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_expression_1</tt>: an <tt>interval</tt> value</li>
    
<li><tt>interval_expression_2</tt>: an <tt>interval</tt> value</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>Returns an <tt>interval</tt> that is overlapping <tt>interval_expression_1</tt> and <tt>interval_expression_2</tt>. If <tt>interval_expression_1</tt> and <tt>interval_expression_2</tt> do not overlap <tt>null</tt> is returned. Note each interval must be of the same type.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;overlap1&quot;: get-overlapping-interval(interval-from-time(time(&quot;11:23:39&quot;), time(&quot;18:27:19&quot;)), interval-from-time(time(&quot;12:23:39&quot;), time(&quot;23:18:00&quot;))), 
  &quot;overlap2&quot;: get-overlapping-interval(interval-from-time(time(&quot;12:23:39&quot;), time(&quot;18:27:19&quot;)), interval-from-time(time(&quot;07:19:39&quot;), time(&quot;09:18:00&quot;))),
  &quot;overlap3&quot;: get-overlapping-interval(interval-from-date(date(&quot;1980-11-30&quot;), date(&quot;1999-09-09&quot;)), interval-from-date(date(&quot;2013-01-01&quot;), date(&quot;2014-01-01&quot;))),
  &quot;overlap4&quot;: get-overlapping-interval(interval-from-date(date(&quot;1980-11-30&quot;), date(&quot;2099-09-09&quot;)), interval-from-date(date(&quot;2013-01-01&quot;), date(&quot;2014-01-01&quot;))),
  &quot;overlap5&quot;: get-overlapping-interval(interval-from-datetime(datetime(&quot;1844-03-03T11:19:39&quot;), datetime(&quot;2000-10-30T18:27:19&quot;)), interval-from-datetime(datetime(&quot;1989-03-04T12:23:39&quot;), datetime(&quot;2009-10-10T23:18:00&quot;))),
  &quot;overlap6&quot;: get-overlapping-interval(interval-from-datetime(datetime(&quot;1989-03-04T12:23:39&quot;), datetime(&quot;2000-10-30T18:27:19&quot;)), interval-from-datetime(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 class="source">
<div class="source">
<pre>{ &quot;overlap1&quot;: interval-time(&quot;12:23:39.000Z, 18:27:19.000Z&quot;), 
  &quot;overlap2&quot;: null, 
  &quot;overlap3&quot;: null, 
  &quot;overlap4&quot;: interval-date(&quot;2013-01-01, 2014-01-01&quot;), 
  &quot;overlap5&quot;: interval-datetime(&quot;1989-03-04T12:23:39.000Z, 2000-10-30T18:27:19.000Z&quot;), 
  &quot;overlap6&quot;: null }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="interval-beforeinterval-afterinterval-meetsinterval-met-byinterval-overlapsinterval-overlapped-byinterval-overlappinginterval-startsinterval-started-byinterval-coversinterval-covered-byinterval-endsinterval-ended-by"></a>interval-before/interval-after/interval-meets/interval-met-by/interval-overlaps/interval-overlapped-by/interval-overlapping/interval-starts/interval-started-by/interval-covers/interval-covered-by/interval-ends/interval-ended-by</h3>
<p>See the <a href="allens.html">Allen&#x2019;s Relations</a>.</p></div>
<div class="section">
<h3><a name="interval-bin"></a>interval-bin</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>interval-bin(time-to-bin, time-bin-anchor, duration-bin-size)
</pre></div></div></li>
  
<li>
<p>Return 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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $c1 := date(&quot;2010-10-30&quot;)
let $c2 := datetime(&quot;-1987-11-19T23:49:23.938&quot;)
let $c3 := time(&quot;12:23:34.930+07:00&quot;)

return { &quot;bin1&quot;: interval-bin($c1, date(&quot;1990-01-01&quot;), year-month-duration(&quot;P1Y&quot;)),
 &quot;bin2&quot;: interval-bin($c2, datetime(&quot;1990-01-01T00:00:00.000Z&quot;), year-month-duration(&quot;P6M&quot;)),
 &quot;bin3&quot;: interval-bin($c3, time(&quot;00:00:00&quot;), day-time-duration(&quot;PD1M&quot;)),
 &quot;bin4&quot;: interval-bin($c2, 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 class="source">
<div class="source">
<pre>{ &quot;bin1&quot;: interval-date(&quot;2010-01-01, 2011-01-01&quot;),
  &quot;bin2&quot;: interval-datetime(&quot;-1987-07-01T00:00:00.000Z, -1986-01-01T00:00:00.000Z&quot;),
  &quot;bin3&quot;: interval-time(&quot;05:23:00.000Z, 05:24:00.000Z&quot;),
  &quot;bin4&quot;: interval-datetime(&quot;-1987-11-19T00:00:00.000Z, -1987-11-20T00:00:00.000Z&quot;)}
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="interval-from-date"></a>interval-from-date</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>interval-from-date(string_expression1, string_expression2)
</pre></div></div></li>
  
<li>
<p>Constructor function for the <tt>interval</tt> type by parsing two date strings.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression1</tt> : The <tt>string</tt> value representing the starting date.</li>
    
<li><tt>string_expression2</tt> : The <tt>string</tt> value representing the ending date.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>interval</tt> value between the two dates.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>{&quot;date-interval&quot;: interval-from-date(&quot;2012-01-01&quot;, &quot;2013-04-01&quot;)}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;date-interval&quot;: interval-date(&quot;2012-01-01, 2013-04-01&quot;) }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="interval-from-time"></a>interval-from-time</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>interval-from-time(string_expression1, string_expression2)
</pre></div></div></li>
  
<li>
<p>Constructor function for the <tt>interval</tt> type by parsing two time strings.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression1</tt> : The <tt>string</tt> value representing the starting time.</li>
    
<li><tt>string_expression2</tt> : The <tt>string</tt> value representing the ending time.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>interval</tt> value between the two times.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>{&quot;time-interval&quot;: interval-from-time(&quot;12:23:34.456Z&quot;, &quot;233445567+0800&quot;)}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;time-interval&quot;: interval-time(&quot;12:23:34.456Z, 15:34:45.567Z&quot;) }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="interval-from-datetime"></a>interval-from-datetime</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>interval-from-datetime(string_expression1, string_expression2)
</pre></div></div></li>
  
<li>
<p>Constructor function for <tt>interval</tt> type by parsing two datetime strings.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>string_expression1</tt> : The <tt>string</tt> value representing the starting datetime.</li>
    
<li><tt>string_expression2</tt> : The <tt>string</tt> value representing the ending datetime.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>interval</tt> value between the two datetimes.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>{&quot;datetime-interval&quot;: interval-from-datetime(&quot;2012-01-01T12:23:34.456+08:00&quot;, &quot;20130401T153445567Z&quot;)}
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;datetime-interval&quot;: interval-datetime(&quot;2012-01-01T04:23:34.456Z, 2013-04-01T15:34:45.567Z&quot;) }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="interval-start-from-datetimedatetime"></a>interval-start-from-date/time/datetime</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $itv1 := interval-start-from-date(&quot;1984-01-01&quot;, &quot;P1Y&quot;)
let $itv2 := interval-start-from-time(time(&quot;02:23:28.394&quot;), &quot;PT3H24M&quot;)
let $itv3 := interval-start-from-datetime(&quot;1999-09-09T09:09:09.999&quot;, duration(&quot;P2M30D&quot;))
return {&quot;interval1&quot;: $itv1, &quot;interval2&quot;: $itv2, &quot;interval3&quot;: $itv3}
</pre></div></div></li>
  
<li>
<p>The expectecd result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;interval1&quot;: interval-date(&quot;1984-01-01, 1985-01-01&quot;), &quot;interval2&quot;: interval-time(&quot;02:23:28.394Z, 05:47:28.394Z&quot;), &quot;interval3&quot;: interval-datetime(&quot;1999-09-09T09:09:09.999Z, 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 class="source">
<div class="source">
<pre>overlap-bins(interval_expression, 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_expression</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>interval_expression</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_expression</tt>. Note that the internal type as <tt>time-to-bin</tt> and <tt>duration-bin-size</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $itv1 := interval-from-time(time(&quot;17:23:37&quot;), time(&quot;18:30:21&quot;))
let $itv2 := interval-from-date(date(&quot;1984-03-17&quot;), date(&quot;2013-08-22&quot;))
let $itv3 := interval-from-datetime(datetime(&quot;1800-01-01T23:59:48.938&quot;), datetime(&quot;2015-07-26T13:28:30.218&quot;))
return { &quot;timebins&quot;: overlap-bins($itv1, time(&quot;00:00:00&quot;), day-time-duration(&quot;PT30M&quot;)),
  &quot;datebins&quot;: overlap-bins($itv2, date(&quot;1990-01-01&quot;), year-month-duration(&quot;P20Y&quot;)),
  &quot;datetimebins&quot;: overlap-bins($itv3, 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 class="source">
<div class="source">
<pre>{ &quot;timebins&quot;: [ interval-time(&quot;17:00:00.000Z, 17:30:00.000Z&quot;), interval-time(&quot;17:30:00.000Z, 18:00:00.000Z&quot;), interval-time(&quot;18:00:00.000Z, 18:30:00.000Z&quot;), interval-time(&quot;18:30:00.000Z, 19:00:00.000Z&quot;) ], 
  &quot;datebins&quot;: [ interval-date(&quot;1970-01-01, 1990-01-01&quot;), interval-date(&quot;1990-01-01, 2010-01-01&quot;), interval-date(&quot;2010-01-01, 2030-01-01&quot;) ], 
  &quot;datetimebins&quot;: [ interval-datetime(&quot;1800-01-01T00:00:00.000Z, 1900-01-01T00:00:00.000Z&quot;), interval-datetime(&quot;1900-01-01T00:00:00.000Z, 2000-01-01T00:00:00.000Z&quot;), interval-datetime(&quot;2000-01-01T00:00:00.000Z, 2100-01-01T00:00:00.000Z&quot;) ] }
</pre></div></div></li>
</ul></div></div>
<div class="section">
<h2><a name="Record_Functions_Back_to_TOC"></a><a name="RecordFunctions" id="RecordFunctions">Record Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
<div class="section">
<h3><a name="get-record-fields"></a>get-record-fields</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>get-record-fields(record_expression)
</pre></div></div></li>
  
<li>
<p>Access the record field names, type and open status for a given record.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>record_expression</tt> : a record value.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An order list of <tt>record</tt> values that include the field-name <tt>string</tt>, field-type <tt>string</tt>, is-open <tt>boolean</tt> and optional nested <tt>orderedList</tt> for the values of a nested record.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $r1 := {&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;] }
return get-record-fields($r1)
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>[ { &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-record-field-value"></a>get-record-field-value</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>get-record-field-value(record_expression, string_expression)
</pre></div></div></li>
  
<li>
<p>Access the field name given in the <tt>string_expression</tt> from the <tt>record_expression</tt>.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>record_expression</tt> : A <tt>record</tt> value.</li>
    
<li><tt>string_expression</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 record.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>let $r1 := {&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;] }
return get-record-field-value($r1, &quot;project&quot;)
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot;AsterixDB&quot;
</pre></div></div></li>
</ul></div></div>
<div class="section">
<h2><a name="Other_Functions_Back_to_TOC"></a><a name="OtherFunctions" id="OtherFunctions">Other Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
<div class="section">
<h3><a name="create-uuid"></a>create-uuid</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>create-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 <tt>uuid</tt>.</li>
  </ul></li>
</ul></div>
<div class="section">
<h3><a name="is-null"></a>is-null</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>is-null(var)
</pre></div></div></li>
  
<li>
<p>Checks whether the given variable is a <tt>null</tt> value.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>var</tt> : A variable (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>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>for $m in ['hello', 'world', null]
where not(is-null($m))
return $m
</pre></div></div></li>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot;hello&quot;
&quot;world&quot;
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="is-system-null"></a>is-system-null</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>is-system-null(var)
</pre></div></div></li>
  
<li>
<p>Checks whether the given variable is a <tt>system null</tt> value.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>var</tt> : A variable (any type is allowed).</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>A <tt>boolean</tt> on whether the variable is a <tt>system null</tt> or not.</li>
  </ul></li>
</ul></div>
<div class="section">
<h3><a name="len"></a>len</h3>

<ul>
  
<li>
<p>Syntax:</p>
<p>len(list_expression)</p></li>
  
<li>
<p>Returns the length of the list list_expression.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>list_expression</tt> : An <tt>OrderedList</tt>, <tt>UnorderedList</tt> or <tt>null</tt>, represents the list need to be checked.</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>An <tt>Int32</tt> that represents the length of list_expression.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>use dataverse TinySocial;

let $l := [&quot;ASTERIX&quot;, &quot;Hyracks&quot;]
return len($l)
</pre></div></div></li>
</ul>

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

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>not(var)
</pre></div></div></li>
  
<li>
<p>Inverts a <tt>boolean</tt> value</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>var</tt> : A <tt>boolean</tt> (or <tt>null</tt>)</li>
  </ul></li>
  
<li>Return Value:
  
<ul>
    
<li>A <tt>boolean</tt>, the inverse of <tt>var</tt>. returns <tt>null</tt> if <tt>var</tt> is null</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>for $m in ['hello', 'world', null]
where not(is-null($m))
return $m
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>&quot;hello&quot;
&quot;world&quot;
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="range"></a>range</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>range(start_numeric_expression, end_numeric_expression)
</pre></div></div></li>
  
<li>
<p>Generates a series of <tt>int64</tt> values based start the <tt>start_numeric_expression</tt> until the <tt>end_numeric_expression</tt>.  The <tt>range</tt> fucntion must be used list argument of a <tt>for</tt> expression.</p></li>
  
<li>Arguments:</li>
  
<li><tt>start_numeric_expression</tt>: A <tt>int8</tt>/<tt>int16</tt>/<tt>int32</tt>/<tt>int64</tt> value representing the start value.</li>
  
<li><tt>end_numeric_expression</tt>: A <tt>int8</tt>/<tt>int16</tt>/<tt>int32</tt>/<tt>int64</tt> value representing the max final value.</li>
  
<li>Return Value:
  
<ul>
    
<li>A generated <tt>uuid</tt>.</li>
  </ul></li>
  
<li>
<p>Example:</p>
  
<div class="source">
<div class="source">
<pre>for $i in range(0, 3)
return $i;
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>[ 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 class="source">
<div class="source">
<pre>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>Returns <tt>caseI-result</tt> if <tt>condition</tt> matches <tt>caseI</tt>, otherwise <tt>default-result</tt>.</li>
  </ul></li>
  
<li>
<p>Example 1:</p>
  
<div class="source">
<div class="source">
<pre>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>
</ul>

<ul>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>0
</pre></div></div></li>
  
<li>
<p>Example 2:</p>
  
<div class="source">
<div class="source">
<pre>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 class="source">
<div class="source">
<pre>3
</pre></div></div></li>
</ul></div></div>
                  </div>
            </div>
          </div>

    <hr/>

    <footer>
            <div class="container-fluid">
              <div class="row span12">Copyright &copy;                    2015
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                    
      </div>

                                                                  <?xml version="1.0" encoding="UTF-8"?>
<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>
    </footer>
  </body>
</html>
