【问题标题】:how to make a query update a column in a find and replace sort of fasion mysql?如何使查询更新查找和替换 fasion mysql 中的列?
【发布时间】:2013-10-13 15:28:32
【问题描述】:

我有一个翻译数据库,到目前为止,诸如休闲演讲/礼貌演讲之类的注释已被放入注释字段。但现在我已经制作了另一列,列出了这些演讲形式。我想把注释中的信息移到它上面。我可以在下面的查询中进行此查询,以根据在备注字段中找到关键字“随意演讲”或“礼貌演讲”来设置新列。

UPDATE `mrhowtos_main`.`eng-jap` SET `form` = 'Casual form' WHERE `notes` LIKE '%Casual speech%';

但是,当我设置新的表单字段时,我还想从备注字段中删除“随意讲话”或“礼貌讲话”。笔记通常会包含诸如“年轻女孩使用的随意演讲”之类的条目。所以我不能只将字段设置为“”。否则我会丢失笔记中的额外信息。 “随意讲话”并不总是在栏目的开头,有时在中间或结尾。如何使查询删除部分注释,例如“随意讲话”,因为它设置了包含讲话形式的新列,但保留了其余注释?

【问题讨论】:

    标签: mysql sql regex


    【解决方案1】:

    很可能,SUBSTRING() 应该可以工作。像这样的:

    UPDATE `mrhowtos_main`.`eng-jap` 
    SET `form` = 'Casual form', `notes` = SUBSTRING(`notes`, -16)
    WHERE `notes` LIKE '%Casual speech%';
    

    这假定任何包含"Casual speech" 的行实际上都包含"Casual speech, "。负值告诉 MySQL 从字符串的 end 开始的许多字符。您可以根据需要进行调整。

    您对"polite speech" 重复基本相同的内容。

    编辑:

    如果您要删除的字符串几乎可以在任何地方,REPLACE() 可能是更好的选择:

    UPDATE `mrhowtos_main`.`eng-jap` 
    SET `form` = 'Casual form', `notes` = REPLACE(`notes`, 'Casual speech', '')
    WHERE `notes` LIKE '%Casual speech%';
    

    【讨论】:

    • 随意的演讲不一定总是在开头,有时在结尾加上其他音符。鉴于此,这仍然有效吗?
    • 啊,我明白了,您只是删除了前 16 个字符。所以当随意的演讲不是笔记中的第一件事时,这将不起作用......
    猜你喜欢
    • 1970-01-01
    • 2016-06-26
    • 2021-02-07
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多