【问题标题】:How to trim all leading and trailing whitespace from all values of a MariaDB column如何从 MariaDB 列的所有值中修剪所有前导和尾随空格
【发布时间】:2019-12-19 12:20:07
【问题描述】:

我想从 MariaDB 列的所有值中修剪所有前导和尾随空格(空格、换行符、制表符等)。这些值可能包含换行符,并且修剪应该将整个多行值视为一个字符串(基本上就像 String.trim() 在 Java 中一样)。

我知道 TRIM() 函数一次只修剪一种字符类型。为此目的似乎太乏味了。

我希望将REGEXP_REPLACE(自 MariaDB 10.0.5 起可用)用于类似

UPDATE my_table SET my_column = REGEXP_REPLACE(my_column, '^[^\\s]*(?s)(.*)[^\\s]*$', '\\1');

但这没有用。

【问题讨论】:

    标签: sql mariadb


    【解决方案1】:

    您的正则表达式模式已关闭,您应该只使用\s 来捕获空格:

    UPDATE my_table
    SET my_column = REGEXP_REPLACE(my_column, '^\\s*(.*?)\\s*$', '\\1');
    

    Demo

    (演示在 MySQL 8.0 中显示,因为 MariaDB 演示存在问题,但唯一的区别是 MySQL 使用 $1 作为捕获组而不是 \\1

    【讨论】:

    • 工作就像一个魅力!感谢您使用漂亮的 dbfiddle 提供快速且经过全面测试的答案。回想起来,我的正则表达式模式没有任何意义,因为我使用了 ^\\s,即“不是空格”,我真正的意思是空格。我什至不知道 dbfiddle 站点 - 非常有用! :)
    • 我必须用(?s)打开dotall-mode:REGEXP_REPLACE(my_column, '(?s)^\\s*(.*?)\\s*$', '\\1')
    猜你喜欢
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2011-03-13
    • 2013-03-04
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多