1

我有一张大约有 50,000 条记录的表。其中一个字段是“已加载”字段,包含从 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。

我将不胜感激任何帮助。

4

1 回答 1

1

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

但是,您可以通过执行您的建议来实现您的目的 - 计算^并制作一串替换值,如下所示:

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

从内到外,我们通过计算分隔符的数量来计算值的数量,并将该计数加 1。我们通过将原始字符串的长度与相同字符串的长度进行比较来计算分隔符,其中分隔符被剥离,REPLACE(...,'^','')用于将每个都替换为空^

该函数通过将字符串表达式重复nREPEAT()来构建字符串。

这会在^字符串的末尾产生一个虚假的,我们很容易用TRIM(TRAILING '^' FROM ...).

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

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

于 2014-10-29T03:02:07.920 回答