我有一个包含大约 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/