MySQL用正则表达式替换字符串

标签 mysql regex replace rlike

我有一个包含大约 50,000 条记录的表。其中一个字段是一个“imploaded”字段,由 1 到 800 之间可变数量的参数组成。我需要将所有参数替换为 0。 示例:

1参数3.45应该变成0.00

2个参数2.27^11.03应该变成0.00^0.00

3个参数809.11^0.12^3334.25应该变成0.00^0.00^0.00

等等。

我真的需要用 0.00 替换 ^ 之间的任何内容(对于 1 个参数,它应该只是 0.00 而没有 ^)。

或者我需要以某种方式计算 ^ 的数量,生成类似 0.00^0.00^0.00 的字符串 ... 并替换它。唯一可用的工具是 MySqlWorkbench。

如果有任何帮助,我将不胜感激。

最佳答案

MySQL 中没有内置正则表达式替换功能。

但是,您可以按照您的建议完成您的目的——计算 ^ 的数量。并制作一串替换值,用这个:

TRIM(TRAILING '^' FROM REPEAT('0.00^',(LENGTH(column) - LENGTH(REPLACE(column,'^','')) + 1)));

从内到外,我们通过计算分隔符的数量来计算值的数量,并将该计数加 1。我们通过将原始字符串的长度与使用 REPLACE(...,'^','') 去除分隔符的同一字符串的长度进行比较来计算分隔符。替换每个 ^一无所有。

REPEAT()函数通过将字符串表达式重复 n 次来构建字符串。

这会导致虚假的 ^在字符串的末尾,我们可以使用 TRIM(TRAILING '^' FROM ...) 轻松删除它.

SELECT t1.*, ...上面的表达式... FROM table_name t1 , 从您的表中验证此逻辑的结果(将 column 替换为列的实际名称),然后您可以 UPDATE table SET column = ...修改值。一旦您对逻辑有信心。

当然,请注意,这表明数据库设计存在问题。正如这个问题似乎暗示的那样,每一列都应该包含一个原子值,而不是值的“列表”。

关于MySQL用正则表达式替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26615724/

相关文章:

c# - 正则表达式打印换行符 C#

javascript - 限制正则​​表达式中的字符长度

javascript 替换和斜杠

string - sed 删除字符的第一个实例和第二个实例之间的所有内容?

c# - 无法使用C#连接到mysql数据库

mysql - 将 mysql 用户定义变量与 group by 条件一起使用

java - Java中如何将时间戳格式转换为日期格式?

mysql - 我应该在此查询中使用什么来替换 GROUP BY?

javascript - Coderbyte 上的字母计数 I JavaScript 挑战

linux - 用 ASCII 空格替换字符串中的 HEX 字符 (\x20)