如何删除MySQL数据库中不再需要的字符串?

时间:2016-12-01 20:20:04

标签: mysql string

这看起来应该很简单,但经过几周的观察,我找不到答案。

我正在尝试删除不再需要的字符串。 Regex_replace听起来很完美,但在MySQL中不可用。

在MySQL中我将如何完成更改:

[报价= ABC; XXXXXX]

到此: [引用= ABC]

问题是: - 这可以出现在文本blob中的任何位置 - xxxxxx只能是数字,但长度可以是6,7或8个字符 - 不添加/删除任何行,只需一次重写一行中一列的内容。

感谢。

1 个答案:

答案 0 :(得分:0)

我认为你真的不需要REGEX_Replace(虽然它会让事情变得更容易)。

假设您提供的示例真实地反映了您拥有的内容:

  1. 您的起点是字符串[quote=<something>;,这意味着您可以开始搜索[quote=

  2. 找到后,您需要搜索;,然后搜索]

  3. 一旦找到它们,你知道在下一次搜索的开始时提取什么(如果你提到的模式在单个blob中出现多次。

  4. 我找到你了吗?

    修改

    此范例旨在根据以下假设将[quote=ABC;xxxxxx]的所有实例转换为[quote=ABC]

    1. 模式可以在输入字符串中出现任意次,

    2. xxxxxx的长度不固定,

    3. 结果字符串(在删除;xxxxxx的所有外观之后)应替换表中的值,

    4. 性能不是问题,因为这将是一次性工作(通过整个表),或者每次都会在一个字符串上运行(例如,在插入新记录之前)。

    5. 将使用的一些MySQL函数:

      1. INSTR:在字符串中搜索子字符串的第一个外观,并返回找到子字符串的位置(偏移量),

      2. SUBSTR:从字符串返回一个子字符串(使用它的几种方法),

      3. CONCAT:连接两个或多个字符串。

      4. 此处介绍的指南适用于操作单个INPUT字符串。如果需要在整个表上使用它,只需将字符串放入CURSOR并循环。

        以下是步骤:

        1. 声明五个INT局部变量作为索引和总输入字符串长度,比如L_Start,L_UpTo,l_Total_Length,l_temp1和l_temp 2,设置l_Start = 1和l_Total_Length = LENGTH(INPUT_String)的初始值,< / p>

        2. 声明一个字符串变量,您将在其中复制&#34; clean&#34;结果并将其作为''启动,例如l_Output_str;还声明一个临时字符串来保存'ABD'的值,比如l_Quote,

        3. 启动无限循环(您将在其中设置退出条件;请参阅下文),

        4. 如果l_Start&gt; = l_Total_Length退出循环(此处是循环中两个退出点之一),

        5. 从L_Start开始,在输入字符串中查找'[quote='的第一个位置,

        6. 如果返回的值为0(即未找到子字符串),则将l_Output_str的当前内容与位置L_start(例如SET l_Output_str = CONCAT(l_Output_str,SUBSTR(INPUT_String,L_Start) ;)的输入字符串(例如;)和退出循环(第二个退出位置)中的任何剩余部分连接起来),

        7. 在输入字符串中搜索从{L_start + 7开始的[quote=符号(即]的长度)并将值保存在l_temp_1中,

        8. 从L_start + 7 + l_temp2开始搜索输入字符串中的SET l_Output_str = CONCAT(l_Output_str,'[quote=',SUBSTR(INPUT_String,L_Start + 7, l_temp_2 - l_temp_1),']') ;符号,并将值保存在l_temp_2中,

        9. 将找到的结果添加到输出字符串{{1}},

        10. 设置L_Start = L_Start + 7 + l_temp_2 + 1;

        11. 循环结束。

        12. 注意:

          1. 由于我既没有制作代码也没有对其进行测试,因此我可能没有正确设置索引;您需要执行详细的测试,以使其按需运行;

          2. 以上 IS 我建议的方法;

          3. 如果输入字符串很长(很多MB),由于连接,您可能会发现性能不佳(即可能需要几秒钟才能完成)。可以采取一些措施来提高性能,但让我们首先使用它,然后在需要时解决性能问题。

          4. 希望以上内容清晰而全面。