mysql - 第三个字符为 "_"时更新

标签 mysql

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

例子:

|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;

最佳答案

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

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

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

如果你觉得处理所有这些感觉不舒服,你总是可以使用子字符串来检查第三个字符的值:

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

关于mysql - 第三个字符为 "_"时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42514111/

相关文章:

php - 从 MySQL 中选择多行

mysql - 在 lua 脚本中使用 mysql

php - 使用索引创建 PHP PDO 查询?

php - 如果该行中的某个单元格为空,如何隐藏整行?

mysql - 选择多列的 max()

javascript - 如何使用 javascript/nodejs 从 latin1 (iso-8859-1) 数据库获取数据?

mysql - 由于缺少 PHP 扩展,CakePHP 3 无法连接到数据库

mysql问题, "else"在此位置无效,期望: END

mysql - 为简单的多语言 CMS 设计数据库

php - 如何查询 Cookie 变量