[role="xpack"] [testenv="basic"] [[sql-functions-conditional]] === Conditional Functions beta[] Functions that return one of their arguments by evaluating in an if-else manner. [[sql-functions-conditional-coalesce]] ==== `COALESCE` .Synopsis: [source, sql] ---- COALESCE(expression<1>, expression<2>, ...) ---- *Input*: <1> 1st expression <2> 2nd expression ... **N**th expression COALESCE can take an arbitrary number of arguments. *Output*: one of the expressions or `null` .Description Returns the first of its arguments that is not null. If all arguments are null, then it returns `null`. ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[coalesceReturnNonNull] ---- ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[coalesceReturnNull] ---- [[sql-functions-conditional-ifnull]] ==== `IFNULL` .Synopsis: [source, sql] ---- IFNULL(expression<1>, expression<2>) ---- *Input*: <1> 1st expression <2> 2nd expression *Output*: 2nd expression if 1st expression is null, otherwise 1st expression. .Description Variant of <> with only two arguments. Returns the first of its arguments that is not null. If all arguments are null, then it returns `null`. ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[ifNullReturnFirst] ---- ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[ifNullReturnSecond] ---- [[sql-functions-conditional-isnull]] ==== `ISNULL` .Synopsis: [source, sql] ---- ISNULL(expression<1>, expression<2>) ---- *Input*: <1> 1st expression <2> 2nd expression *Output*: 2nd expression if 1st expression is null, otherwise 1st expression. .Description Variant of <> with only two arguments. Returns the first of its arguments that is not null. If all arguments are null, then it returns `null`. ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[isNullReturnFirst] ---- ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[isNullReturnSecond] ---- [[sql-functions-conditional-nvl]] ==== `NVL` .Synopsis: [source, sql] ---- NVL(expression<1>, expression<2>) ---- *Input*: <1> 1st expression <2> 2nd expression *Output*: 2nd expression if 1st expression is null, otherwise 1st expression. .Description Variant of <> with only two arguments. Returns the first of its arguments that is not null. If all arguments are null, then it returns `null`. ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[nvlReturnFirst] ---- ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[nvlReturnSecond] ---- [[sql-functions-conditional-nullif]] ==== `NULLIF` .Synopsis: [source, sql] ---- NULLIF(expression<1>, expression<2>) ---- *Input*: <1> 1st expression <2> 2nd expression *Output*: `null` if the 2 expressions are equal, otherwise the 1st expression. .Description Returns `null` when the two input expressions are equal and if not, it returns the 1st expression. ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[nullIfReturnFirst] ---- ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[nullIfReturnNull] ---- [[sql-functions-conditional-greatest]] ==== `GREATEST` .Synopsis: [source, sql] ---- GREATEST(expression<1>, expression<2>, ...) ---- *Input*: <1> 1st expression <2> 2nd expression ... **N**th expression GREATEST can take an arbitrary number of arguments and all of them must be of the same data type. *Output*: one of the expressions or `null` .Description Returns the argument that has the largest value which is not null. If all arguments are null, then it returns `null`. ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[greatestReturnNonNull] ---- ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[greatestReturnNull] ---- [[sql-functions-conditional-least]] ==== `LEAST` .Synopsis: [source, sql] ---- LEAST(expression<1>, expression<2>, ...) ---- *Input*: <1> 1st expression <2> 2nd expression ... **N**th expression LEAST can take an arbitrary number of arguments and all of them must be of the same data type. *Output*: one of the expressions or `null` .Description Returns the argument that has the smallest value which is not null. If all arguments are null, then it returns `null`. ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[leastReturnNonNull] ---- ["source","sql",subs="attributes,callouts,macros"] ---- include-tagged::{sql-specs}/docs.csv-spec[leastReturnNull] ----