我有一张价值表。比如说:
create table table1 (FirstName varchar(255), LastName varchar(255));
INSERT INTO table1 (FirstName, LastName) VALUES ('Mariah1', 'Billy3');
INSERT INTO table1 (FirstName, LastName) VALUES ('Mo2', 'Molly2');
INSERT INTO table1 (FirstName, LastName) VALUES ('Sally3', 'Silly1');
我想更新所有值以删除名称中的数字。所以我尝试:
UPDATE table1 t
SET (FirstName, LastName) = (
select
regexp_matches(FirstName ,'(\w+)\d+') as updatedFirstName,
regexp_matches(LastName ,'(\w+)\d+') as updatedLastName
FROM table1 u
WHERE u.FirstName = t.FirstName and u.LastName = t.LastName
)
但我得到的例子是{Mariah}, {Billy}
作为值,而不是:Mariah, Billy
我试着在最后添加[0]
,添加额外的()
等没有运气。
我想知道(最好是psql):
- 如果我可以通过将返回单行的子查询转换为简单的元组来修复上面的查询。
- 我有另一种方法来完成上述更新
1条答案
按热度按时间axkjgtzd1#
我会使用子字符串或regexp_replace:
substring提取所有非数字的内容:
或者使用regexp_replace删除数字:
WHERE子句用于避免更新不需要更新的行