【发布时间】:2019-12-28 13:52:37
【问题描述】:
使用 SQLite,我想替换字符串中的多个占位符,但不是静态提供键值对,占位符和替换值必须来自表。这个问题最好用例子来说明:
SELECT
REPLACE( REPLACE( REPLACE( text_with_placeholders
, '$NAME', 'Eren')
, '$TITLE','Mr')
, '$LEVEL','4th')
FROM table_with_text
不过,就我而言,我有一个相当长的占位符列表,理想情况下它们是动态的,从而简化了添加和更改值。因此,我不想更改查询,而是想在键值表中添加/更新记录。
关于如何解决这个难题有什么聪明的主意吗?也许是为了灵感,到目前为止,我的(死胡同)道路是使用 SQLite 不错的 group_concat() 函数,这与交叉连接一起使您能够将带有文本的行和键对值作为字符串放在同一行上.但是你仍然需要某种循环来遍历它们,这样就行不通了。
SELECT
REPLACE( REPLACE( REPLACE( text_with_placeholders
, '$NAME', 'Eren')
, '$TITLE','Mr')
, '$LEVEL','4th')
, kv.keys
, kv.vals
FROM table_with_text
CROSS JOIN ( SELECT GROUP_CONCAT(key) keys, GROUP_CONCAT(val) vals FROM key_val_table ) kv
我知道这个问题的答案可能是不可能的,这没关系。不过,鉴于 StackOverflow 的许多聪明才智,我还是想试一试。
我也知道最好在目标应用程序中完成,而不是在数据库中。所以没有必要指出这一点。
【问题讨论】:
标签: sqlite