<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
<concept id="conditional_functions">

  <title>Impala Conditional Functions</title>

  <titlealts audience="PDF">

    <navtitle>Conditional Functions</navtitle>

  </titlealts>

  <prolog>
    <metadata>
      <data name="Category" value="Impala"/>
      <data name="Category" value="Impala Functions"/>
      <data name="Category" value="SQL"/>
      <data name="Category" value="Data Analysts"/>
      <data name="Category" value="Developers"/>
      <data name="Category" value="Querying"/>
    </metadata>
  </prolog>

  <conbody>

    <p>
      Impala supports the following conditional functions for testing equality, comparison
      operators, and nullity:
    </p>

    <ul>
      <li>
        <xref href="#conditional_functions/case">CASE</xref>
      </li>

      <li>
        <xref href="#conditional_functions/case2">CASE2</xref>
      </li>

      <li>
        <xref href="#conditional_functions/coalesce">COALESCE</xref>
      </li>

      <li>
        <xref href="#conditional_functions/decode">DECODE</xref>
      </li>

      <li>
        <xref href="#conditional_functions/if">IF</xref>
      </li>

      <li>
        <xref href="#conditional_functions/ifnull">IFNULL</xref>
      </li>

      <li>
        <xref href="#conditional_functions/isfalse">ISFALSE</xref>
      </li>

      <li>
        <xref href="#conditional_functions/isnotfalse">ISNOTFALSE</xref>
      </li>

      <li>
        <xref href="#conditional_functions/isnottrue">ISNOTTRUE</xref>
      </li>

      <li>
        <xref href="#conditional_functions/isnull">ISNULL</xref>
      </li>

      <li>
        <xref href="#conditional_functions/istrue">ISTRUE</xref>
      </li>

      <li>
        <xref href="#conditional_functions/nonnullvalue">NONNULLVALUE</xref>
      </li>

      <li>
        <xref href="#conditional_functions/nullif">NULLIF</xref>
      </li>

      <li>
        <xref href="#conditional_functions/nullifzero">NULLIFZERO</xref>
      </li>

      <li>
        <xref href="#conditional_functions/nullvalue">NULLVALUE</xref>
      </li>

      <li>
        <xref href="#conditional_functions/nvl">NVL</xref>
      </li>

      <li>
        <xref href="#conditional_functions/nvl2">NVL2</xref>
      </li>

      <li>
        <xref href="#conditional_functions/zeroifnull">ZEROIFNULL</xref>
      </li>
    </ul>

    <dl>
      <dlentry id="case">

        <dt>
          CASE a WHEN b THEN c [WHEN d THEN e]... [ELSE f] END
        </dt>

        <dd>
          <b>Purpose:</b> Compares an expression to one or more possible values, and returns a
          corresponding result when a match is found.
          <p
            conref="../shared/impala_common.xml#common/return_same_type"/>

          <p conref="../shared/impala_common.xml#common/usage_notes_blurb"/>

          <p>
            In this form of the <codeph>CASE</codeph> expression, the initial value
            <codeph>A</codeph> being evaluated for each row it typically a column reference, or
            an expression involving a column. This form can only compare against a set of
            specified values, not ranges, multi-value comparisons such as
            <codeph>BETWEEN</codeph> or <codeph>IN</codeph>, regular expressions, or
            <codeph>NULL</codeph>.
          </p>

          <p conref="../shared/impala_common.xml#common/example_blurb"/>

          <p>
            Although this example is split across multiple lines, you can put any or all parts
            of a <codeph>CASE</codeph> expression on a single line, with no punctuation or other
            separators between the <codeph>WHEN</codeph>, <codeph>ELSE</codeph>, and
            <codeph>END</codeph> clauses.
          </p>
<codeblock>select case x
    when 1 then 'one'
    when 2 then 'two'
    when 0 then 'zero'
    else 'out of range'
  end
    from t1;
</codeblock>
        </dd>

      </dlentry>

      <dlentry id="case2">

        <dt>
          CASE WHEN a THEN b [WHEN c THEN d]... [ELSE e] END
        </dt>

        <dd>
          <b>Purpose:</b> Tests whether any of a sequence of expressions is
          <codeph>TRUE</codeph>, and returns a corresponding result for the first true
          expression.
          <p
            conref="../shared/impala_common.xml#common/return_same_type"/>

          <p conref="../shared/impala_common.xml#common/usage_notes_blurb"/>

          <p>
            <codeph>CASE</codeph> expressions without an initial test value have more
            flexibility. For example, they can test different columns in different
            <codeph>WHEN</codeph> clauses, or use comparison operators such as
            <codeph>BETWEEN</codeph>, <codeph>IN</codeph> and <codeph>IS NULL</codeph> rather
            than comparing against discrete values.
          </p>

          <p>
            <codeph>CASE</codeph> expressions are often the foundation of long queries that
            summarize and format results for easy-to-read reports. For example, you might use a
            <codeph>CASE</codeph> function call to turn values from a numeric column into
            category strings corresponding to integer values, or labels such as <q>Small</q>,
            <q>Medium</q> and <q>Large</q> based on ranges. Then subsequent parts of the query
            might aggregate based on the transformed values, such as how many values are
            classified as small, medium, or large. You can also use <codeph>CASE</codeph> to
            signal problems with out-of-bounds values, <codeph>NULL</codeph> values, and so on.
          </p>

          <p>
            By using operators such as <codeph>OR</codeph>, <codeph>IN</codeph>,
            <codeph>REGEXP</codeph>, and so on in <codeph>CASE</codeph> expressions, you can
            build extensive tests and transformations into a single query. Therefore,
            applications that construct SQL statements often rely heavily on
            <codeph>CASE</codeph> calls in the generated SQL code.
          </p>

          <p>
            Because this flexible form of the <codeph>CASE</codeph> expressions allows you to
            perform many comparisons and call multiple functions when evaluating each row, be
            careful applying elaborate <codeph>CASE</codeph> expressions to queries that process
            large amounts of data. For example, when practical, evaluate and transform values
            through <codeph>CASE</codeph> after applying operations such as aggregations that
            reduce the size of the result set; transform numbers to strings after performing
            joins with the original numeric values.
          </p>

          <p conref="../shared/impala_common.xml#common/example_blurb"/>

          <p>
            Although this example is split across multiple lines, you can put any or all parts
            of a <codeph>CASE</codeph> expression on a single line, with no punctuation or other
            separators between the <codeph>WHEN</codeph>, <codeph>ELSE</codeph>, and
            <codeph>END</codeph> clauses.
          </p>
<codeblock>select case
    when dayname(now()) in ('Saturday','Sunday') then 'result undefined on weekends'
    when x > y then 'x greater than y'
    when x = y then 'x and y are equal'
    when x is null or y is null then 'one of the columns is null'
    else null
  end
    from t1;
</codeblock>
        </dd>

      </dlentry>

      <dlentry id="coalesce">

        <dt>
          COALESCE(type v1, type v2, ...)
        </dt>

        <dd>
          <b>Purpose:</b> Returns the first specified argument that is not
          <codeph>NULL</codeph>, or <codeph>NULL</codeph> if all arguments are
          <codeph>NULL</codeph>.
          <p
            conref="../shared/impala_common.xml#common/return_same_type"/>
        </dd>

      </dlentry>

      <dlentry rev="2.0.0" id="decode">

        <dt>
          DECODE(type expression, type search1, type result1 [, type search2, type result2 ...]
          [, type default] )
        </dt>

        <dd>
          <b>Purpose:</b> Compares the first argument, <codeph>expression</codeph>, to the
          <codeph>search</codeph> expressions using the <codeph>IS NOT DISTINCT</codeph>
          operator, and returns:
          <ul>
            <li>
              The corresponding <codeph>result</codeph> when a match is found.
            </li>

            <li>
              The first corresponding <codeph>result</codeph> if there are more than one
              matching <codeph>search</codeph> expressions.
            </li>

            <li>
              The <codeph>default</codeph> expression if none of the search expressions matches
              the first argument <codeph>expression</codeph>.
            </li>

            <li>
              <codeph>NULL</codeph> if the final <codeph>default</codeph> expression is omitted
              and none of the <codeph>search</codeph> expressions matches the first argument.
            </li>
          </ul>
          <p>
            <b>Return type:</b> Same as the first argument with the following exceptions:
            <ul>
              <li>
                Integer values are promoted to <codeph>BIGINT</codeph>.
              </li>

              <li>
                Floating-point values are promoted to <codeph>DOUBLE</codeph>.
              </li>

              <li>
                Use <codeph>CAST()</codeph> when inserting into a smaller numeric column.
              </li>
            </ul>
          </p>

          <p conref="../shared/impala_common.xml#common/usage_notes_blurb"/>
          <ul>
            <li>
              Can be used as shorthand for a <codeph>CASE</codeph> expression.
            </li>

            <li>
              The first argument, <codeph>expression</codeph>, and the search expressions must
              be of the same type or convertible types.
            </li>

            <li>
              The result expression can be a different type, but all result expressions must be
              of the same type.
            </li>

            <li>
              Returns a successful match if the first argument is <codeph>NULL</codeph> and a
              search expression is also <codeph>NULL</codeph>.
            </li>

            <li>
              <codeph>NULL</codeph> can be used as a search expression.
            </li>
          </ul>
          <p conref="../shared/impala_common.xml#common/example_blurb"/>

          <p>
            The following example translates numeric day values into weekday names, such as 1 to
            Monday, 2 to Tuesday, etc.
          </p>
<codeblock>SELECT event, DECODE(day_of_week, 1, "Monday", 2, "Tuesday", 3, "Wednesday",
  4, "Thursday", 5, "Friday", 6, "Saturday", 7, "Sunday", "Unknown day")
  FROM calendar;
</codeblock>
        </dd>

      </dlentry>

      <dlentry id="if">

        <dt>
          IF(BOOLEAN condition, type ifTrue, type ifFalseOrNull)
        </dt>

        <dd>
          <b>Purpose:</b> Tests an expression and returns a corresponding result depending on
          whether the result is <codeph>TRUE</codeph>, <codeph>FALSE</codeph>, or
          <codeph>NULL</codeph>.
          <p>
            <b>Return type:</b> Same as the <codeph>ifTrue</codeph> argument value
          </p>
        </dd>

      </dlentry>

      <dlentry rev="1.3.0" id="ifnull">

        <dt>
          IFNULL(type a, type ifNull)
        </dt>

        <dd>
          <b>Purpose:</b> Alias for the <codeph>ISNULL()</codeph> function, with the same
          behavior. To simplify porting SQL with vendor extensions to Impala.
          <p conref="../shared/impala_common.xml#common/added_in_130"/>
        </dd>

      </dlentry>

      <dlentry id="isfalse" rev="2.2.0">

        <dt>
          ISFALSE(BOOLEAN expression)
        </dt>

        <dd>
          <b>Purpose:</b> Returns <codeph>TRUE</codeph> if the expression is
          <codeph>FALSE</codeph>. Returns <codeph>FALSE</codeph> if the expression is
          <codeph>TRUE</codeph> or <codeph>NULL</codeph>.
          <p>
            Same as the <codeph>IS FALSE</codeph> operator.
          </p>

          <p>
            Similar to <codeph>ISNOTTRUE()</codeph>, except it returns the opposite value for a
            <codeph>NULL</codeph> argument.
          </p>

          <p conref="../shared/impala_common.xml#common/return_type_boolean"/>

          <p conref="../shared/impala_common.xml#common/added_in_220"/>

          <p conref="../shared/impala_common.xml#common/usage_notes_blurb"/>

          <p
            conref="../shared/impala_common.xml#common/boolean_functions_vs_expressions"
          />
        </dd>

      </dlentry>

      <dlentry id="isnotfalse" rev="2.2.0">

        <dt>
          ISNOTFALSE(BOOLEAN expression)
        </dt>

        <dd>
          <b>Purpose:</b> Tests if a Boolean expression is not <codeph>FALSE</codeph> (that is,
          either <codeph>TRUE</codeph> or <codeph>NULL</codeph>). Returns <codeph>TRUE</codeph>
          if so. If the argument is <codeph>NULL</codeph>, returns <codeph>TRUE</codeph>.
          <p>
            Same as the <codeph>IS NOT FALSE</codeph> operator.
          </p>

          <p>
            Similar to <codeph>ISTRUE()</codeph>, except it returns the opposite value for a
            <codeph>NULL</codeph> argument.
          </p>

          <p
            conref="../shared/impala_common.xml#common/return_type_boolean"/>

          <p conref="../shared/impala_common.xml#common/for_compatibility_only"/>

          <p conref="../shared/impala_common.xml#common/added_in_220"/>

          <p conref="../shared/impala_common.xml#common/usage_notes_blurb"/>

          <p
            conref="../shared/impala_common.xml#common/boolean_functions_vs_expressions"
          />
        </dd>

      </dlentry>

      <dlentry id="isnottrue" rev="2.2.0">

        <dt>
          ISNOTTRUE(BOOLEAN expression)
        </dt>

        <dd>
          <b>Purpose:</b> Tests if a Boolean expression is not <codeph>TRUE</codeph> (that is,
          either <codeph>FALSE</codeph> or <codeph>NULL</codeph>). Returns <codeph>TRUE</codeph>
          if so. If the argument is <codeph>NULL</codeph>, returns <codeph>TRUE</codeph>.
          <p>
            Same as the <codeph>IS NOT TRUE</codeph> operator.
          </p>

          <p>
            Similar to <codeph>ISFALSE()</codeph>, except it returns the opposite value for a
            <codeph>NULL</codeph> argument.
          </p>

          <p
            conref="../shared/impala_common.xml#common/return_type_boolean"/>

          <p conref="../shared/impala_common.xml#common/added_in_220"/>

          <p conref="../shared/impala_common.xml#common/usage_notes_blurb"/>

          <p
            conref="../shared/impala_common.xml#common/boolean_functions_vs_expressions"
          />
        </dd>

      </dlentry>

      <dlentry id="isnull">

        <dt>
          ISNULL(type a, type ifNull)
        </dt>

        <dd>
          <b>Purpose:</b> Tests if an expression is <codeph>NULL</codeph>, and returns the
          expression result value if not. If the first argument is <codeph>NULL</codeph>,
          returns the second argument.
          <p>
            <b>Compatibility notes:</b> Equivalent to the <codeph>NVL()</codeph> function from
            Oracle Database or <codeph>IFNULL()</codeph> from MySQL. The <codeph>NVL()</codeph>
            and <codeph>IFNULL()</codeph> functions are also available in Impala.
          </p>

          <p>
            <b>Return type:</b> Same as the first argument value
          </p>
        </dd>

      </dlentry>

      <dlentry id="istrue" rev="2.2.0">

        <dt>
          ISTRUE(BOOLEAN expression)
        </dt>

        <dd>
          <b>Purpose:</b> Returns <codeph>TRUE</codeph> if the expression is
          <codeph>TRUE</codeph>. Returns <codeph>FALSE</codeph> if the expression is
          <codeph>FALSE</codeph> or <codeph>NULL</codeph>.
          <p>
            Same as the <codeph>IS TRUE</codeph> operator.
          </p>

          <p>
            Similar to <codeph>ISNOTFALSE()</codeph>, except it returns the opposite value for a
            <codeph>NULL</codeph> argument.
          </p>

          <p conref="../shared/impala_common.xml#common/return_type_boolean"/>

          <p conref="../shared/impala_common.xml#common/for_compatibility_only"/>

          <p conref="../shared/impala_common.xml#common/added_in_220"/>

          <p conref="../shared/impala_common.xml#common/usage_notes_blurb"/>

          <p
            conref="../shared/impala_common.xml#common/boolean_functions_vs_expressions"
          />
        </dd>

      </dlentry>

      <dlentry id="nonnullvalue" rev="2.2.0">

        <dt>
          NONNULLVALUE(type expression)
        </dt>

        <dd>
          <b>Purpose:</b> Returns <codeph>TRUE</codeph> if the expression is non-null and
          returns <codeph>FALSE</codeph> if the expression is <codeph>NULL</codeph>.
          <p>
            Same as the <codeph>IS NOT NULL</codeph> operator.
          </p>

          <p>
            The converse of <codeph>NULLVALUE()</codeph>.
          </p>

          <p
            conref="../shared/impala_common.xml#common/return_type_boolean"/>

          <p conref="../shared/impala_common.xml#common/for_compatibility_only"/>

          <p conref="../shared/impala_common.xml#common/added_in_220"/>
        </dd>

      </dlentry>

      <dlentry rev="1.3.0" id="nullif">

        <dt>
          NULLIF(type expr1, type expr2)
        </dt>

        <dd>
          <b>Purpose:</b> Returns <codeph>NULL</codeph> if the two specified arguments are
          equal. If the specified arguments are not equal, returns the value of
          <varname>expr1</varname>. The data types of the expressions must be compatible,
          according to the conversion rules from <xref href="impala_datatypes.xml#datatypes"/>.
          You cannot use an expression that evaluates to <codeph>NULL</codeph> for
          <varname>expr1</varname>; that way, you can distinguish a return value of
          <codeph>NULL</codeph> from an argument value of <codeph>NULL</codeph>, which would
          never match <varname>expr2</varname>.
          <p>
            <b>Usage notes:</b> This function is effectively shorthand for a
            <codeph>CASE</codeph> expression of the form:
          </p>
<codeblock>CASE
  WHEN <varname>expr1</varname> = <varname>expr2</varname> THEN NULL
  ELSE <varname>expr1</varname>
END</codeblock>
          <p>
            It is commonly used in division expressions, to produce a <codeph>NULL</codeph>
            result instead of a divide-by-zero error when the divisor is equal to zero:
          </p>
<codeblock>select 1.0 / nullif(c1,0) as reciprocal from t1;</codeblock>
          <p>
            You might also use it for compatibility with other database systems that support the
            same <codeph>NULLIF()</codeph> function.
          </p>

          <p conref="../shared/impala_common.xml#common/return_same_type"/>

          <p conref="../shared/impala_common.xml#common/added_in_130"/>
        </dd>

      </dlentry>

      <dlentry rev="1.3.0" id="nullifzero">

        <dt>
          NULLIFZERO(type numeric_expr)
        </dt>

        <dd>
          <b>Purpose:</b> Returns <codeph>NULL</codeph> if the numeric expression evaluates to
          0, otherwise returns the result of the expression.
          <p>
            <b>Usage notes:</b> Used to avoid error conditions such as divide-by-zero in numeric
            calculations. Serves as shorthand for a more elaborate <codeph>CASE</codeph>
            expression, to simplify porting SQL with vendor extensions to Impala.
          </p>

          <p>
            <b>Return type:</b> Same type as the input argument
          </p>

          <p conref="../shared/impala_common.xml#common/added_in_130"/>
        </dd>

      </dlentry>

      <dlentry id="nullvalue" rev="2.2.0">

        <dt>
          NULLVALUE(type expression)
        </dt>

        <dd>
          <b>Purpose:</b> Returns <codeph>TRUE</codeph> if the expression is
          <codeph>NULL</codeph>, and returns <codeph>FALSE</codeph> otherwise.
          <p>
            Same as the <codeph>IS NULL</codeph> operator.
          </p>

          <p>
            The converse of <codeph>NONNULLVALUE()</codeph>.
          </p>

          <p
            conref="../shared/impala_common.xml#common/return_type_boolean"/>

          <p conref="../shared/impala_common.xml#common/for_compatibility_only"/>

          <p conref="../shared/impala_common.xml#common/added_in_220"/>
        </dd>

      </dlentry>

      <dlentry id="nvl" rev="1.1">

        <dt>
          NVL(type a, type ifNull)
        </dt>

        <dd>
          <b>Purpose:</b> Alias for the <codeph>ISNULL()</codeph> function. Returns the first
          argument if the first argument is not <codeph>NULL</codeph>. Returns the second
          argument if the first argument is <codeph>NULL</codeph>.
          <p>
            Equivalent to the <codeph>NVL()</codeph> function in Oracle Database or
            <codeph>IFNULL()</codeph> in MySQL.
          </p>

          <p>
            <b>Return type:</b> Same as the first argument value
          </p>

          <p conref="../shared/impala_common.xml#common/added_in_11"/>
        </dd>

      </dlentry>

      <dlentry id="nvl2" rev="2.9.0 IMPALA-5030">

        <dt>
          NVL2(type a, type ifNotNull, type ifNull)
        </dt>

        <dd>
          <b>Purpose:</b> Returns the second argument,
            <codeph>ifNotNull</codeph>, if the first argument is not
            <codeph>NULL</codeph>. Returns the third argument,
            <codeph>ifNull</codeph>, if the first argument is
            <codeph>NULL</codeph>. <p> Equivalent to the <codeph>NVL2()</codeph>
            function in Oracle Database. </p>
          <p>
            <b>Return type:</b> Same as the first argument value </p>
          <p conref="../shared/impala_common.xml#common/added_in_290"/>
          <p conref="../shared/impala_common.xml#common/example_blurb"/>
          <codeblock>
SELECT NVL2(NULL, 999, 0); -- Returns 0
SELECT NVL2('ABC', 'Is Not Null', 'Is Null'); -- Returns 'Is Not Null'</codeblock>
        </dd>

      </dlentry>

      <dlentry rev="1.3.0" id="zeroifnull">

        <dt>
          ZEROIFNULL(type numeric_expr)
        </dt>

        <dd>
          <b>Purpose:</b> Returns 0 if the numeric expression evaluates to
          <codeph>NULL</codeph>, otherwise returns the result of the expression.
          <p>
            <b>Usage notes:</b> Used to avoid unexpected results due to unexpected propagation
            of <codeph>NULL</codeph> values in numeric calculations. Serves as shorthand for a
            more elaborate <codeph>CASE</codeph> expression, to simplify porting SQL with vendor
            extensions to Impala.
          </p>

          <p>
            <b>Return type:</b> Same type as the input argument
          </p>

          <p conref="../shared/impala_common.xml#common/added_in_130"/>
        </dd>

      </dlentry>
    </dl>

  </conbody>

</concept>
