如何在MySQL中最后一次出现字符之前获取所有内容?

时间:2019-02-22 06:32:27

标签: mysql sql

我想从列中最后一次出现特定字符之前获取所有内容。

带有负值的

SUBSTRING_INDEX对于分隔很有效,但返回我要删除的字符串部分。例如,将一列视为

first. second. third. fourth

SUBSTRING_INDEX(Col1, '.', -1)返回fourth,但我想获取

first. second. third.

实际上,我想通过删除上一次出现的.之后的所有内容来更新同一列。换句话说,我想删除SUBSTRING_INDEX(Col1, '.', -1)部分,但不能简单地将REPLACE用作

UPDATE table1 SET Col1=REPLACE(Col1,SUBSTRING_INDEX(Col1, '.', -1),'')

因为它可能出现在字符串的其他部分。

3 个答案:

答案 0 :(得分:2)

使用REVERSE函数可以做到这一点:

UPDATE yourTable
SET col =
    REVERSE(SUBSTRING(REVERSE(col), INSTR(REVERSE(col), '.')))

cmake-documentation

这里的想法是反转字符串,然后使用INSTR查找最后一个点(现在是第一个点)的位置。然后,我们从位置开始到子字符串,然后再次反转。

答案 1 :(得分:2)

我不会使用reverse()。相反:

UPDATE table1
    SET Col1 = LEFT(col1, LENGTH(col1) - LENGTH(SUBSTRING_INDEX(Col1, '.', -1)) - 1);

答案 2 :(得分:1)

您可以使用left()locate()功能

Demo

UPDATE table1 SET Col1= left(col1,
locate(SUBSTRING_INDEX(col1, '.', -1),col1))

输出:

val
first. second. third.