SQL从列的末尾删除字符串的一部分

5
我知道一列中每个值的结尾都是“Potato”。
有没有办法从每行中删除“Potato”?
我知道CONCAT可以将一个字符串添加到列中的值,但如果我知道要删除的字符串在每个值的结尾处,应该如何删除列中每个值结尾的字符串呢?
例如:
+-----------+
| MyValue   |
+-----------+
| FooPotato |
| BarPotato |
+-----------+

should become:

+---------+
| MyValue |
+---------+
| Foo     |
| Bar     |
+---------+

3
仅使用 replace 函数不够吗? (replace(yourcolumn, 'Potato', '') where yourcolumn like '%Potato' ? 这将替换字段中所有的 Potato,但这可能是可以接受的。 - Raphaël Althaus
列是什么意思?你是指列名吗?你是指对于每个字段,在每一行中替换“Potato”吗? - ApplePie
Raphael,我不确定 where 子句是否必要。如果“Potato”缺失,它不会只是跳过该行吗? - ApplePie
@AlexandreP.Levasseur,如果你只想替换“end”,那么使用“replace”可能有点过度了。因此,限制一下可能是一种方法。但是,是的,这可能并不必要。 - Raphaël Althaus
它帮了我!不要在意那些说胡话的人。 - Fernando Silva
2个回答

16
UPDATE someTable SET someColumn = REPLACE(someColumn, 'Potato', '')
WHERE someColumn LIKE '%Potato'

查看演示


1
如果我理解问题正确,百分号应该放在开头。 - Angelo Fuchs
@AngeloNeuschitzer,你肯定做到了。我没有。 - Kermit
2
这不会导致所有“Potato”的出现都被切掉吗?比如,“My Potato is like no other Potato”会变成“My is like no other ”。 - Angelo Fuchs
2
我编辑了你的演示以展示我的意思:http://sqlfiddle.com/#!2/d44733/1/0 - Angelo Fuchs
@AngeloNeuschitzer 有趣。 - Kermit

7
请阅读: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html 您可以使用 "LEFT" 函数来截取字符串的末尾。例如,'Potato' 有6个字符,所以此语句将减少该列中所有条目的内容6个字符。
UPDATE table
SET column =
    LEFT(column, LENGTH(column)-6)
WHERE column LIKE '%Potato';

demo


你应该加上一个 WHERE 条件,以防万一没有 potato;或者只匹配 WHERE RIGHT(column) = 'potato' - Kermit
@FreshPrinceOfSO 可能是这样,但 OP 明确表示每一列都是这样结束的。不过没错,我会加上的。 - Angelo Fuchs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接