【问题标题】:Replace repeating special characters in a String - MySQL替换字符串中重复的特殊字符 - MySQL
【发布时间】:2020-09-08 08:11:25
【问题描述】:

如何用单个字符替换 n/ 个重复字符?所有特殊字符!@#$%^&*()_-+=[]{};:'",<.>/?\|~ 我需要它们只出现一次。我开始嵌入“替换”,但它失控了,需要我对每个字符进行多次替换。

字符串示例:

  • 这太棒了!!!!!!!!!!!!
  • ''''''看看这个!!!!!'''''
  • $$$$$$$钱$$$$$$$
  • ,,,,,,,,,加油''''''''''''

所需的输出:

  • 这太棒了!
  • '看看这个!'
  • $Money$
  • ,加油'

【问题讨论】:

  • 你用的是哪个mysql版本?
  • 版本 8.0.17.
  • 我不确定 MySQL 中的正则表达式语法,但一般来说,你会用 \1$1 替换 ([!@#$%^&*()_\-+=[\]{};:'",<.>\/?\\|~])+。见this demo
  • 我的回答对您解决问题有帮助吗?如果是这样,如果您能给我投票,我将不胜感激

标签: mysql regex


【解决方案1】:

根据上面的人的建议,我想出了这个:

SELECT REGEXP_REPLACE('''''''look at this!!!!!''''', '([$!&*_;:@#+\'=%^,<.>/?|~])\\1+', '$1');

如前所述,它捕获第一组中的每个出现并替换为单个字符。在 v8.0 上测试,似乎适用于您的示例。

【讨论】:

    【解决方案2】:

    让我们尝试以下方法:

    ([&*()_\-+={}[\];:!@#$%^'",<.>\/?\\|~])+$1
    

    PS:首先你应该在SQL中使用适当的查询来检索所需的数据,查询的标准格式如下:

    SELECT <col-name> FROM <table>
    

    然后你必须更新它并将更新查询发送到数据库。

    有关更多信息,请参阅以下链接:

    这些问题可能有不止一种解决方案。

    【讨论】:

    • 请原谅,我是 SQL 新手,如何将其写入查询?这是我失败的尝试。选择替换(文本,'([&*()_\-+={}[];:!@#$%^''",<.>\/?\\|~])',+1)作为测试结果,其中文本如 '%???%'
    猜你喜欢
    • 1970-01-01
    • 2019-10-14
    • 2016-09-21
    • 2020-04-13
    • 2014-12-07
    相关资源
    最近更新 更多