![]() | ![]() | ![]() | ![]() |
10.3. FunctionsThe specific function to be used in a function invocation is determined according to the following steps. Function Type Resolution
Note that the "best match" rules are identical for operator and function type resolution. Some examples follow. Example 10-4. Rounding Function Argument Type Resolution There is only one SELECT round(4, 4); round -------- 4.0000 (1 row) That query is actually transformed by the parser to SELECT round(CAST (4 AS numeric), 4); Since numeric constants with decimal points are initially assigned the type numeric, the following query will require no type conversion and might therefore be slightly more efficient: SELECT round(4.0, 4); Example 10-5. Substring Function Type Resolution There are several SELECT substr('1234', 3);
substr
--------
34
(1 row)If the string is declared to be of type varchar, as might be the case if it comes from a table, then the parser will try to convert it to become text: SELECT substr(varchar '1234', 3);
substr
--------
34
(1 row)This is transformed by the parser to effectively become SELECT substr(CAST (varchar '1234' AS text), 3);
And, if the function is called with an argument of type integer, the parser will try to convert that to text: SELECT substr(1234, 3); ERROR: function substr(integer, integer) does not exist HINT: No function matches the given name and argument types. You might need to add explicit type casts. This does not work because integer does not have an implicit cast to text. An explicit cast will work, however: SELECT substr(CAST (1234 AS text), 3);
substr
--------
34
(1 row)Notes
|
||||||||||||||