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
Activity
Field | Original Value | New Value |
---|---|---|
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, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table; Also this one has the advantage of being able to pass 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. |
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, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table; Also this one has the advantage of being able to pass 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. |
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, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table; Also this one has the advantage of being able to pass 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. |
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: {code:sql}SELECT printf('%s %s %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table; Also this one has the advantage of being able to pass 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. |
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: {code:sql}SELECT printf('%s %s %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table; Also this one has the advantage of being able to pass 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. |
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: {code:sql}SELECT printf('%s %s %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} # 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; {code} 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. |
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: {code:sql}SELECT printf('%s %s %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} # 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; {code} 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. |
Formatting more complex strings in a SELECT statement can get awkward when there are many {noformat}concat(){noformat}, {noformat}format(){noformat}, 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: {code:sql}SELECT printf('%s %s %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} # 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; {code} 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. |
Description |
Formatting more complex strings in a SELECT statement can get awkward when there are many {noformat}concat(){noformat}, {noformat}format(){noformat}, 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: {code:sql}SELECT printf('%s %s %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} # 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; {code} 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. |
Formatting more complex strings in a SELECT statement can get awkward when there are many {{monospaced}}concat(){{monospaced}}, {{monospaced}}format(){{monospaced}}, 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: {code:sql}SELECT printf('%s %s %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} # 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; {code} 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. |
Description |
Formatting more complex strings in a SELECT statement can get awkward when there are many {{monospaced}}concat(){{monospaced}}, {{monospaced}}format(){{monospaced}}, 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: {code:sql}SELECT printf('%s %s %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} # 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; {code} 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. |
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: {code:sql}SELECT printf('%s %s %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} # 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; {code} 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. |
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: {code:sql}SELECT printf('%s %s %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} # 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; {code} 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. |
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: {code:sql}SELECT printf('%s %s %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} # 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; {code} 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. |
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: {code:sql}SELECT printf('%s %s %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} # 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; {code} 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. |
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: {code:sql}SELECT printf('%s %s, %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} # 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; {code} 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. |
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: {code:sql}SELECT printf('%s %s, %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} # 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; {code} 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. |
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: {code:sql}SELECT printf('%s %s, %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} -- 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; {code} 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. |
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: {code:sql}SELECT printf('%s %s, %s', first_name, last_name, job_title) from employees;{code} But it doesn't necessarily need to look this way, an alternative syntax could be, which would leverage the fact that the server already know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} Also this one has the advantage of being able to pass formatting options within the curly braces: {code:sql} -- 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; {code} 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. |
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: {code:sql}SELECT printf('%s %s, %s', first_name, last_name, job_title) from employees;{code} 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 know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} In that syntax one passes formatting options within the curly braces: {code:sql} -- 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; {code} 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. |
Fix Version/s | 10.7 [ 24805 ] | |
Fix Version/s | 10.6 [ 24028 ] |
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: {code:sql}SELECT printf('%s %s, %s', first_name, last_name, job_title) from employees;{code} 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 know the datatype of each field used in the formatting scheme: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} In that syntax one passes formatting options within the curly braces: {code:sql} -- 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; {code} 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. |
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: {code:sql}SELECT printf('%s %s, %s', first_name, last_name, job_title) from employees;{code} 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: {code:sql}SELECT sformat('arg1: {}, arg2: {}', col1, col2) from table;{code} In that syntax one passes formatting options within the curly braces: {code:sql} -- 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; {code} 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. |
Assignee | Robert Bindar [ robertbindar ] | Vicențiu Ciorbaru [ cvicentiu ] |
Remote Link | This issue links to "PostgreSQL (Web Link)" [ 31357 ] |
Remote Link | This issue links to "Python 3 (Web Link)" [ 31358 ] |
Remote Link | This issue links to "Rust (Web Link)" [ 31359 ] |
Remote Link | This issue links to "C printf (Web Link)" [ 31360 ] |
Remote Link | This issue links to "{fmt} — implementation of C++20 std::format (Web Link)" [ 31408 ] |
Link | This issue blocks MDEV-19784 [ MDEV-19784 ] |
Priority | Minor [ 4 ] | Critical [ 2 ] |
Assignee | Vicențiu Ciorbaru [ cvicentiu ] | Sergei Golubchik [ serg ] |
Status | Open [ 1 ] | Confirmed [ 10101 ] |
Status | Confirmed [ 10101 ] | In Review [ 10002 ] |
Link | This issue blocks TODO-3121 [ TODO-3121 ] |
Assignee | Sergei Golubchik [ serg ] | Elena Stepanova [ elenst ] |
Status | In Review [ 10002 ] | Stalled [ 10000 ] |
Link | This issue relates to TODO-3118 [ TODO-3118 ] |
Assignee | Elena Stepanova [ elenst ] | Roel Van de Paar [ roel ] |
Status | Stalled [ 10000 ] | In Progress [ 3 ] |
Status | In Progress [ 3 ] | Stalled [ 10000 ] |
Assignee | Roel Van de Paar [ roel ] | Sergei Golubchik [ serg ] |
Assignee | Sergei Golubchik [ serg ] | Roel Van de Paar [ roel ] |
Link |
This issue causes |
Link | This issue relates to MDEV-26648 [ MDEV-26648 ] |
Link | This issue relates to MDEV-26649 [ MDEV-26649 ] |
Link | This issue causes MDEV-26648 [ MDEV-26648 ] |
Link | This issue relates to MDEV-26648 [ MDEV-26648 ] |
Link | This issue causes MDEV-26649 [ MDEV-26649 ] |
Link | This issue relates to MDEV-26649 [ MDEV-26649 ] |
Link | This issue causes MDEV-26653 [ MDEV-26653 ] |
Link |
This issue causes |
Assignee | Roel Van de Paar [ roel ] | Sergei Golubchik [ serg ] |
Fix Version/s | 10.7.1 [ 26120 ] | |
Fix Version/s | 10.7 [ 24805 ] | |
Resolution | Fixed [ 1 ] | |
Status | Stalled [ 10000 ] | Closed [ 6 ] |
Workflow | MariaDB v3 [ 119616 ] | MariaDB v4 [ 134400 ] |
Labels | gsoc21 | Preview_10.7 gsoc21 |
Link | This issue relates to MDEV-31024 [ MDEV-31024 ] |
is there anything comparable in other DBMS-es?