如果通过MYSQL在字符串中出现特殊事件,则通过字符串的一部分更新字符串

时间:2017-01-19 16:28:31

标签: mysql

我有一个带varchar字段的表,其中包含一个带变量lenght的描述。如果字符串中出现20161203_,我想以下面显示的形式更新它(删除LC之后和1001_LC之前)中的部分)

例如,如果表格包含:

|col1 |
+-----+
|20161512_NL_Luxus_1_DE |
|20161217_1001_LC_YoBirthdayNo_A_CH  |
|20161512_NL_SDT_4_DE|
|20170117_2003_LC_YoBirthdayYes_A_DE |

我想要一个将返回的查询:

|result|
+------+
|20161512_NL_Luxus_1_DE|
|20161217_LC_YoBirthdayNo_A_CH|
|20161512_NL_SDT_4_DE|
|20170117_LC_YoBirthdayYes_A_DE |

我尝试过:

UPDATE table1 SET col1 = CASE WHEN col1 LIKE '%LC%' THEN SUBSTRING_INDEX(SUBSTRING_INDEX(col1, '_', 1), '_', 2)

但这不正确...

提前致谢!

1 个答案:

答案 0 :(得分:1)

我还首先尝试使用SUBSTRING_INDEX执行此操作,但是当它看起来只支持单字符分隔符时放弃了。我的后备解决方案只是使用INSTRSUBSTRING的组合。在下面的查询中,我将更新的col1连接在一起,在此过程中拼接出您要删除的四位数字。

UPDATE table1
SET col1 = CONCAT(SUBSTRING(col1, 1, 8),                  -- keep 8 digit date
                  SUBSTRING(col1, INSTR(col1, '_LC_')))   -- and everything from _LC_
WHERE col1 LIKE '%_LC_%'                                  -- onwards