第三个字符为“_”时更新

时间:2017-02-28 16:35:04

标签: mysql

我想以特定的方式更新表A中的第1列:当列中的第三个字符是“_”时,我想插入前两个字符,如果第三个字符是其他任何其他我想留下它,因为它是。

示例:

|col1|                     
+--------+
|161_512 |       
|16_1217 |  
|161_512 |      
|161512  |         
|17_0117 |
|1615_12 |        

预期结果:

|col1|                     
+--------+
|161_512 |       
|16      |  
|161_512 |      
|161512  |         
|17      |
|1615_12 |              

这就是我到目前为止所做的 - 但这不能正常工作:

UPDATE table A SET col1 = CASE WHEN col1 LIKE '%_%' THEN ... ELSE  col1;

2 个答案:

答案 0 :(得分:4)

如果要匹配LIKE表达式中的文字下划线,则需要使用反斜杠对其进行转义。未转义的下划线表示匹配任何单个字符。但是,我会改写您的查询,以便它使用WHERE子句来确定是否更新给定记录。

UPDATE table A
SET col1 = ...
WHERE col1 LIKE '__\_%'

请注意,LIKE __\_%表示匹配任意两个字符,后跟文字下划线,后跟其他任何字符。

如果您不愿意处理所有这些,您可以随时使用子字符串来检查第三个字符的值:

UPDATE table A
SET col1 = ...
WHERE SUBSTRING(col1, 3, 1) = '_'

答案 1 :(得分:1)

  

当列中的第三个字符是" _"我想插入前两个字符

我不知道这意味着什么。前2个字符属性?你想在哪里插入它们?

  

当列中的第三个字符是" _"

这很简单。您可能已经知道,下划线字符是一个完全匹配一个字符的通配符。因此

LIKE '%_%' 

将匹配具有至少一个字符的任何属性。如果您明确想要匹配下划线字符,那么您将转义下划线

LIKE '%\_%'

要求将其作为第三个字符,请在它之前对2个单个字符执行匹配:

LIKE '__\_%' 

(L I K E' _ _ \ _')