请问 postgresql中有 replace into或者 Merge into 这样的功能的语句吗 我想实现这样的功能啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问 postgresql中有 replace into或者 Merge into 这样的功能的语句吗 我想实现这样的功能啊相关的知识,希望对你有一定的参考价值。

请问 postgresql中有 replace into或者 Merge into 这样的功能的语句吗 我想实现这样的功能啊

如果没有

你可以帮我写个存储过程吗 谢谢你了 大哥大姐

参考技术A 没有这样的功能,前几天才找到一个存储过程,不过我没用过
CREATE TABLE db (a INT PRIMARY KEY, b TEXT);

CREATE FUNCTION merge_db(key INT, data TEXT) RETURNS VOID AS
$$
BEGIN
LOOP
UPDATE db SET b = data WHERE a = key;
IF found THEN
RETURN;
END IF;

BEGIN
INSERT INTO db(a,b) VALUES (key, data);
RETURN;
EXCEPTION WHEN unique_violation THEN
-- do nothing
END;
END LOOP;
END;
$$
LANGUAGE plpgsql;

SELECT merge_db(1, 'david');
SELECT merge_db(1, 'dennis');本回答被提问者采纳

Postgresql regexp_replace 替换所有数字

【中文标题】Postgresql regexp_replace 替换所有数字【英文标题】:Postgres SQL regexp_replace replace all number 【发布时间】:2020-12-26 08:07:20 【问题描述】:

接下来我需要一些帮助。我在 SQL 中有一个字段文本,它记录了一个用“|”分隔的时间列表。例如

'14613|15474|3832|148|5236|5348|1055|524' 每个值都是以毫秒为单位的时间。该字段可以是任意长度,例如完全正确的“3215|2654”或“4565”(只有 1 个值)。我需要获取此字段并将所有数字替换为 -1000 值。

所以 '14613|15474|3832|148|5236|5348|1055|524' 将是 '-1000|-1000|-1000|-1000|-1000|-1000|-1000|-1000'

或“3215|2654”=>“-1000|-1000”或“4565”=>“-1000”。

我尝试使用 regexp_replace(times_field,'[[:digit:]]','-1000','g') 但它会替换每个数字,而不是完整的数字,所以在这个例子中:

“3215|2654”必须是“-1000|-1000”,我得到:

'-1000-1000-1000-1000|-1000-1000-1000-1000',我尝试使用其他组合和更多正则表达式选项,但我已经完成了。

需要你的帮助,谢谢!!!。

【问题讨论】:

【参考方案1】:

我们可以在这里尝试使用REGEXP_REPLACE

UPDATE yourTable
SET times_field = REGEXP_REPLACE(times_field, '\y[0-9]+\y', '-1000', 'g');

如果您真的想更改您的数据,而只是以这种方式查看您的数据,那么请使用选择:

SELECT
    times_field,
    REGEXP_REPLACE(times_field, '\y[0-9]+\y', '-1000', 'g') AS times_field_replace
FROM yourTable;

请注意,无论哪种情况,我们都会将 g 作为fourtb 参数传递给REGEXP_REPLACE,以对所有管道分隔的数字进行全局替换。

【讨论】:

【参考方案2】:

[[:digit:]] - 匹配数字 [0-9]

+ 量词 - 匹配一次到无限次,尽可能多次

你的正则表达式必须看起来像

regexp_replace(times_field,'[[:digit:]]+','-1000','g')

【讨论】:

非常感谢!!它很有效,而且很简单,我真的给你 +1 票,但我不能因为我的名誉。 “感谢反馈!声望低于 15 人的投票会被记录下来,但不要更改公开显示的帖子得分。” :(

以上是关于请问 postgresql中有 replace into或者 Merge into 这样的功能的语句吗 我想实现这样的功能啊的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql regexp_replace 替换所有数字

Postgresql 中的 REGEXP_REPLACE 不是子字符串

PostgreSQL RETURNING 失败并出现 REGEXP_REPLACE

需要使用 regexp_replace (Postgresql) 将逗号添加到数字列表中

Postgresql regexp_replace() 反斜杠和双引号

Postgresql regex_replace 逗号,单引号和双引号