Details
-
Task
-
Status: Closed (View Workflow)
-
Critical
-
Resolution: Fixed
Description
Formatting more complex strings in a SELECT statement can get awkward when there are many concat(), format(), etc calls involved.
It would be very cool and helpful to have a function that takes an input string and a formatting specification and returns string formatted using the rules the user passed in the specification.
A great example for such a function is the classic C printf function, which, in this context, would look something like:
SELECT printf('%s %s, %s', first_name, last_name, job_title) from employees; |
But it doesn't necessarily need to look this way, an alternative syntax could be Python-ish, which would leverage the fact that the server already knows the datatype of each field used in the formatting scheme:
SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table; |
In that syntax one passes formatting options within the curly braces:
-- Print 'arg1: col1, arg2: col2' where col1 from table is of datetime type and should be printed as: 'Sunday November 2021'
|
SELECT sformat('arg1: {%W %M %Y}, arg2: {}', col1, col2) from table; |
Ideally, this new function should use, behind the scenes, the existing builtin formatting functions in MariaDB (e.g. date_format(), format()) and even future formatting functions (e.g. MySQL's format_bytes(), format_pico_time()), so the syntax has to be designed in a smart way to accommodate easily future additions.
Attachments
Issue Links
- blocks
-
MDEV-19784 C++11 protectors for my_error
-
- In Review
-
- causes
-
MDEV-26646 SFORMAT Does not allow @variable use
-
- Closed
-
-
MDEV-26648 SFORMAT auto-typing
-
- Open
-
-
MDEV-26649 SFORMAT: Temporal type support (DATE) missing
-
- Open
-
-
MDEV-26653 SFORMAT: DECIMAL support is missing
-
- Open
-
-
MDEV-26691 SFORMAT: Pass down FLOAT as FLOAT, without upcast to DOUBLE
-
- Closed
-
- relates to
-
MDEV-31024 Server crash / ASAN use-after-poison in Binary_string::free_buffer / Item_func_sformat::~Item_func_sformat
-
- Confirmed
-
- links to
Though it's covered in the testcase (input (5,5,5)) should this give a warning ("extraneous inputs/parameter found") - or the existing ERROR 1582 (42000): Incorrect parameter count in the call to native function 'sformat'?
10.7.0 53b2c1f4664a3cb90f583979d9aa2771b7e1c98d (Debug)
10.7.0-dbg>SELECT SFORMAT(1,2,3);
+----------------+
| SFORMAT(1,2,3) |
+----------------+
| 1 |
+----------------+
1 row in set (0.000 sec)