gpt4 book ai didi

postgresql - PostgreSQL 的占位符模板

转载 作者:行者123 更新时间:2023-11-29 12:47:28 27 4
gpt4 key购买 nike

我需要这样的功能

SELECT vformat('Hello %%! Bye %%...', array['John','Maria'], '%%');
-- 'Hello John! Bye Maria...'

提供一个带有占位符的字符串(一个模板),并将相应的输入输入到一个向量中,它返回一个文本。 “占位符标记”是一个自由字符串。

我不能使用 pg9.1 格式(如 sprintf)函数,因为它不允许除 '%' 之外的其他标记(参见示例 Python formatter)并且不允许数组参数(参见示例 vsprintf) ).PostgreSQL 9.0(我认为是 8.4+)的最简单解决方案是

CREATE FUNCTION array_zipper_string(anyarray,anyarray) RETURNS text AS $$ 
-- use with bigger array at left
SELECT string_agg(t.val||coalesce($2[t.idx],''),'')
FROM (SELECT generate_subscripts($1, 1) AS idx, unnest($1) AS val) AS t;
$$ LANGUAGE SQL IMMUTABLE;

CREATE FUNCTION tpl_positional(text,anyarray,varchar DEFAULT '%%')
RETURNS text AS $$
SELECT array_zipper_string(string_to_array($1,$3),$2);
$$ LANGUAGE SQL IMMUTABLE;
CREATE FUNCTION tpl_positional(
text, text, varchar DEFAULT '%%',varchar DEFAULT '|'
) RETURNS text AS $$
SELECT tpl_positional($1,string_to_array($2,$4),$3);
$$ LANGUAGE SQL IMMUTABLE;

-- TESTING:
SELECT tpl_positional('Hello %%! Bye %%...', 'John|Maria');
SELECT tpl_positional('Hello %%!',array['John']);

是否有众所周知的(开源)函数 来做同样的事情?

PS:这样做还有更多(!)......我的愿望 list :

  • 从标准库中开源
  • 可索引占位符的选项,'Hello %%{1}!再见 %%{2}...'
  • 使用格式化程序的选项,“有 %%2d 只猴子。”或 '有 %%{1|2d} 只猴子。';

最佳答案

PostgreSQL FORMAT() 函数根据格式字符串格式化参数。

如果您使用过 C 编程语言,您会发现 FORMAT() 函数类似于 sprintf() 函数。

SELECT FORMAT('Hello, %s','PostgreSQL');

format
-------------------
Hello, PostgreSQL
(1 row)

有关详细信息,请参阅 http://www.postgresqltutorial.com/postgresql-format/

关于postgresql - PostgreSQL 的占位符模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253501/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com