【发布时间】:2013-12-07 18:46:55
【问题描述】:
这是我的设置:
表 1 (table_with_info):包含我想替换的带有子字符串的 varchar 列表。
表 2 (sub_info):包含两列:table_with_info 中我要替换的子字符串和我要替换的字符串。
我想做的是用 sub_info 中的替换替换 table_with_info 中的所有子字符串。
这在一定程度上可行,但问题是select replace(...) 为每个替换的单词返回一个新行,而不是替换单个行中的所有单词。
我正在尽我所能解释,但我不知道是不是太清楚了。这是正在发生的事情/我想要发生的事情的代码示例。
这是我的代码:
create table table_with_info
(
val varchar
);
insert into table_with_info values
('this this is test data');
create table sub_info
(
word_from varchar,
word_to varchar
);
insert into sub_info values
('this','replace1')
, ('test', 'replace2');
update table_with_info set val = (select replace("val", "word_from", "word_to")
from "table_with_info", "sub_info"
update() 函数不起作用,因为 select() 返回两行:
Row 1: replace1 replace1 is test data
Row 2: this this is replace2 data
所以我希望它返回的 select 语句是:
Row 1: replace1 replace1 is test data
有什么想法吗?我无法在我正在运行的系统上创建 UDF。
【问题讨论】:
-
您在引用带有“”的列,您知道吗?这不是将它们视为字符串而不是字段吗?
-
您确定不希望 select 语句返回
replace1 replace1 is replace2 data? -
@nrathaus:标准 SQL 和 PostgreSQL 在包含空格的标识符周围使用双引号,区分大小写,... MySQL 为此使用反引号,各种 MS 产品使用括号。字符串文字使用单引号。
标签: sql postgresql replace sql-update pattern-matching