在我的PSQL数据库中,我有以下表结构,我想了解如何从currentIds
和totalIds
中删除多个字符串
CREATE TABLE "public"."candidates" (
"day" timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
"study_id" varchar(6) NOT NULL,
"site_id" varchar(32),
"status" varchar(32) NOT NULL,
"total" int4 NOT NULL,
"current" int4 NOT NULL,
"referrer_token" varchar(255) NOT NULL DEFAULT 'NO_REFERRER_TOKEN'::character varying,
"total_ids" text NOT NULL DEFAULT '|'::text,
"current_ids" text NOT NULL DEFAULT '|'::text
);
我想实现的是下面的例子。
例如:
current_ids: '|ABX1-001|ABX1-002|ABX1-003|ABX1-004|ABX1-005|ABX1-006|'
total_ids: '|ABX1-001|ABX1-002|ABX1-003|ABX1-004|ABX1-004|ABX1-006|ABX1-007|'
从这两列中,我想删除ID:'ABX1- 003'、'ABX1- 006'、'ABX1-007'
所以最终的结果是:
current_ids: '|ABX1-001|ABX1-002|ABX1-004|ABX1-005|'
total_ids: '|ABX1-001|ABX1-002|ABX1-004|ABX1-004|'
我试过这样的方法,但没有成功
UPDATE
candidates
SET
"current_ids" = regexp_replace("current_ids", 'ABX1-003|ABX1-006|ABX1-007', '', 'g')
WHERE
"current_ids" in('ABX1-003', 'ABX1-006', 'ABX1-007')
1条答案
按热度按时间rn0zuynd1#
以下查询将仅更新包含要更改的字符串的行:
使用单个模式来选择将受影响的行并驱动正则表达式替换。后看
(?<=\|)
确保每个替换匹配之前都有一个|
分隔符,而不会被匹配消耗掉|
;因此将只找到全字段匹配。