Difference in how GREATEST and COALESCE process arguments

Description

There is a difference in how COALESCE and GREATEST
passed to a function requiring a valid date process their
arguments.

1. COALESCE recursively requires valid dates from its arguments:

Notice, it ignored the first argument and reported a warning for it,
then chose the second argument.

2. GREATEST does not require validity from its arguments:

Notice, it did not require validity from the first argument and did warn
not warn about it, and returned the second argument.

If GREATEST worked in the similar way with COALESCE,
the result for the entire query would be NULL, because
get_date('2010-00-01', NO_ZERO_IN_DATE) would return NULL.

This difference should be discussed,
and the other functions should be checked

Another example when COALESCE and GREATEST/LEAST return different results:

Notice difference in:

  • Length: 12 vs 23

  • Collation: utf8_general_ci vs binary

  • Flags: BINARY in least only

  • Returned result: '1.0' vs '1'

Environment

None

Status

Assignee

Alexander Barkov

Reporter

Alexander Barkov

Labels

None

External issue ID

None

External issue ID

None

Fix versions

Affects versions

Priority

Minor
Configure