【问题标题】:How to use an array in REPLACE() function?如何在 REPLACE() 函数中使用数组?
【发布时间】:2016-02-17 16:28:55
【问题描述】:

我有一些字符我想用其他字符替换它们。

  • - => *
  • / => .
  • < => {
  • > => }

这里还有一个表中的记录示例:(数据库)

+-------------------+
| - it <is> a test/ |
+-------------------+

我想要这个输出:

+-------------------+
| * it {is} a test. |
+-------------------+

好吧,我可以使用 4 个单独的更新查询来做到这一点:(通过一个接一个地执行它们)

UPDATE table SET `col` = REPLACE(`col`, '-', '*' );
UPDATE table SET `col` = REPLACE(`col`, '/', '.' );
UPDATE table SET `col` = REPLACE(`col`, '<', '{' );
UPDATE table SET `col` = REPLACE(`col`, '>', '}' );

现在我想知道,有没有更短的解决方案? (因为实际上,替换的情况超过 12 种)。 例如,是否可以将所有这些符号写入一个数组,然后将该数组放入 update 查询中一次?

【问题讨论】:

    标签: mysql sql replace


    【解决方案1】:
    UPDATE table 
    SET `col` = REPLACE(REPLACE(REPLACE(REPLACE(`col`, 
                                                             '>', 
                                                             '}' ), 
                                                     '<', 
                                                     '{' ), 
                                             '/', 
                                             '.' ), 
                                     '-', 
                                     '*' );
    

    postgresql translate 上有一个函数可以做到这一点。 http://www.postgresql.org/docs/9.1/static/functions-string.html

    在这里我找到了一个复制该函数的存储过程,(注释是西班牙语)。

    http://www.forosdelweb.com/f86/funcion-translate-mysql-704190/

    【讨论】:

    • 并不是说这不是一个好的解决方案,但应该注意的是,走这条路显然会牺牲可读性来提高效率。
    • 看起来很难看,但很容易以编程方式生成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多