mysql - 如果字符串与模式匹配,则删除字符串的匹配部分

标签 mysql sql regex

我的车辆表(包含不到 59,000 个条目)中有一个字段“型号”,其值可能类似于:

Roadline (09-14)

我想删除 (XX-XX)(如果存在)并将“已处理”值填充到字段模型名称中。

任何帮助将不胜感激!

最佳答案

一个非常简单的解决方案是使用 SUBSTRING_INDEX隔离 ( 之前的部分。您可以使用 REGEXP 来确保模式匹配,但不幸的是,您不能使用它来捕获匹配。

SELECT
  model,
  CASE
    WHEN model REGEXP '\\([0-9]+-[0-9]+\\)$' THEN SUBSTRING_INDEX(model, '(', 1)
    ELSE model
  END AS modelname
FROM vehicles

一旦确定数据看起来正常,您就可以像这样更新其他列:

UPDATE vehicles
SET modelname = CASE
  WHEN model REGEXP '\\([0-9]+-[0-9]+\\)$' THEN SUBSTRING_INDEX(model, '(', 1)
  ELSE model
END

关于mysql - 如果字符串与模式匹配,则删除字符串的匹配部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51253480/

相关文章:

mysql - 通过在彼此之间嵌套子查询来解决 MySQL 中 61 个表 JOIN 的限制

mysql - 来自多个表的内部连接

sql - Groovy,如何进行两阶段提交?在Sql.withTransaction中可以跨多个数据库管理transactionscope吗?

MYSql - 在 Zend Db 中使用相关子查询

android - 我无法从我的 android 手机连接到 MySQL,而我可以从 android studio 模拟器连接到 MySQL

php - 如何在 Laravel 迁移中安全地将不可为空的列添加到现有表中?

c++ - 使用 regex_search 获取所有匹配项的索引?

java - 使用正则表达式将字符串拆分为多个子字符串。应返回匹配项和非匹配项

Python 正则表达式 : Match 1 or 2 digits, 返回最长

mysql - 即使mysql表中没有记录也返回默认数据