通过用子字符串替换一列中的字符串来更新表

时间:2016-02-20 17:43:21

标签: sql postgresql

我有一个看起来像这样的表:

 id | name                        | color
----|-----------------------------|-------
 1  | some string?12345           | red
 2  | another string?843          | red
 3  | and another string?84930283 | blue

我需要更新所有行的名称列以删除'?'以及它之后的一切。所以最终的结果应该是:

 id | name               | color
----|--------------------|-------
 1  | some string        | red
 2  | another string     | red
 3  | and another string | blue

4 个答案:

答案 0 :(得分:2)

您可以使用split_part

 SELECT split_part(name, '?', 1)
 FROM mytable

UPDATE你可以使用:

UPDATE mytable
SET name = split_part(name, '?', 1)
WHERE strpos(name, '?') <> 0

Demo here

答案 1 :(得分:2)

或者也许......只是添加另一种方法:

SQL> update table set name = substring(name from '^[^?]*') ;

答案 2 :(得分:1)

使用LEFTPOSITION字符串函数。官方 link

查看结果

Select id, LEFT(name,POSITION('?' in name)-1) as Name, Color
From Yourtable

update

Update Yourtable 
SET name = LEFT(name,POSITION('?' in name)-1)
Where POSITION('?' in name)> 0

答案 3 :(得分:0)

至于问题:String Functions and Operators

Offtopic,请勿阅读以下任何内容。

最初有史前人口头传递知识。

然后有书籍,每个有权访问它们的人都可以从中获取知识。

然后谷歌来了,每个人都能得到这个问题的答案。

随后出现了StackOverflow,任何人都可以请求有人向Google询问并获得他们的答案以获得一些奖励。

下一步是什么?