我想从列中最后一次出现特定字符之前获取所有内容。
带有负值的 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),'')
因为它可能出现在字符串的其他部分。
答案 0 :(得分:2)
使用REVERSE
函数可以做到这一点:
UPDATE yourTable
SET col =
REVERSE(SUBSTRING(REVERSE(col), INSTR(REVERSE(col), '.')))
这里的想法是反转字符串,然后使用INSTR
查找最后一个点(现在是第一个点)的位置。然后,我们从位置开始到子字符串,然后再次反转。
答案 1 :(得分:2)
我不会使用reverse()
。相反:
UPDATE table1
SET Col1 = LEFT(col1, LENGTH(col1) - LENGTH(SUBSTRING_INDEX(Col1, '.', -1)) - 1);
答案 2 :(得分:1)
您可以使用left()
和locate()
功能
UPDATE table1 SET Col1= left(col1,
locate(SUBSTRING_INDEX(col1, '.', -1),col1))
输出:
val
first. second. third.