10.7 预览功能:类似 Python 的字符串格式化

有时需要将来自不同列的数据组合成一个字符串。例如,

SELECT CONCAT(first_name, ' ', last_name) FROM employees;

这看起来不算太糟,但如果你需要做比这更复杂的事情,它很快就会失控。例如,假设我们还需要在这里提到薪水

SELECT CONCAT(first_name, ' ', last_name, ' -> ', CAST(FORMAT(salary, 0) AS VARCHAR(10)), ' ', currency) FROM employees;

此预览版展示了 MariaDB 10.7 的一个新功能,该功能由 Alan Cueva 与其导师 Vicențiu Ciorbaru 共同开发,作为 Google Summer of Code (MDEV-25015) 的一部分。一个新的 SQL 函数 SFORMAT,使用类似 Python(或类似 Rust、类似 C++20,任君选择)的格式语法。

使用新的 SFORMAT 函数,上面的示例可以写成

SELECT SFORMAT('{} {} -> {:L} {}', first_name, last_name, salary, currency) FROM employees;

从某种意义上说,它可被视为 CONCAT 的更便捷版本。类似地,它可用于即时生成 SQL

SELECT SFORMAT('select * from `{}` where `{}` = {}', table_name, cond_column_name, QUOTE(value)) FROM reports;

但是这个函数能做到更多以前使用 SQL 很难或几乎不可能做到的事情。该实现使用了 fmt.dev 格式化库,完整的语法可以在那里找到。

如何亲自尝试 10.7 sformat 预览版?

Tarball

前往 tarball 下载页

容器

使用容器 quay.io/mariadb-foundation/mariadb-devel:10.7-mdev-25015-sformat

Binder 在线 MariaDB Jupyter Notebook

或者在 Binder 中在线尝试此功能。

欢迎反馈

如果您在此功能预览版中遇到任何问题,或者发现设计问题或意外的边缘情况,请在 MDEV 项目中提交 JIRA 错误/功能请求告知我们。欢迎在 Zulip 上讨论。