请问 postgresql中有 replace into或者 Merge into 这样的功能的语句吗 我想实现这样的功能啊
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问 postgresql中有 replace into或者 Merge into 这样的功能的语句吗 我想实现这样的功能啊相关的知识,希望对你有一定的参考价值。
请问 postgresql中有 replace into或者 Merge into 这样的功能的语句吗 我想实现这样的功能啊
如果没有
你可以帮我写个存储过程吗 谢谢你了 大哥大姐
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) 将逗号添加到数字列表中