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 Feature: 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