我有一个带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)
但这不正确...
提前致谢!
答案 0 :(得分:1)
我还首先尝试使用SUBSTRING_INDEX
执行此操作,但是当它看起来只支持单字符分隔符时放弃了。我的后备解决方案只是使用INSTR
和SUBSTRING
的组合。在下面的查询中,我将更新的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