MySQL:trim * both * whitespace和换行符

时间:2015-02-06 15:11:06

标签: mysql trim

我有一个文本列,其内容在字符串的前后都混合了换行符和空格字符。我正在尝试编写一个SELECT语句,向我显示没有前导和尾随垃圾的内容。

以下查询修剪空格:

SELECT TRIM(column)
FROM table;

虽然这个修剪新线:

SELECT TRIM('\n' FROM column)
FROM table;

我也尝试了this answer,但它不起作用:

SELECT TRIM(BOTH '\t' OR '\n' FROM TRIM(BOTH '\n' OR '\t' FROM TRIM(column)))
FROM table;

有没有办法删除两种类型的前导和尾随字符的混合?

UPDATE :我无法更新,因为我仍然希望在内容中出现空格/换行符时出现。

我有一些带有空格的字段,后跟一堆新行,后面跟着更多的空格/换行符。因此进退两难。

4 个答案:

答案 0 :(得分:2)

另一种方法是用空字符串替换'\ n',然后修剪它。这是代码:

SELECT TRIM(REPLACE(column, '\n','' )) from table;

或者,如果您愿意,可以调整两次。

SELECT TRIM(TRIM('\n' FROM column)) from table;

答案 1 :(得分:2)

不幸的是TRIM(BOTH '\n' OR '\r' FROM myfield)无效。因此,下面的代码只修剪一个换行符(\r\n),而不是多个:

SELECT TRIM(TRIM(BOTH '\n' FROM(TRIM(BOTH '\r' FROM myfield)))) FROM mytable

请注意,上述语句不会将<space>\r\n mytext修改为mytext,因为\r\n不在开头。

MariaDB的解决方案

如果您使用的是MariaDB(https://mariadb.com/kb/en/mariadb/pcre/),则可以使用正则表达式来解决问题。以下表达式从文本中删除所有空格前缀:

SELECT REGEXP_REPLACE(myfield, '^[\r\n ]*(.*)', '\\1') FROM mytable

答案 2 :(得分:0)

结束了在Ruby中的表现:

def process_text(text)
  if text
    text.force_encoding('UTF-8')
    .gsub(/((\.\s)|\.|\u2026){4,}/, '...') # shorten multiple dots (or ellipsis) to 3 dots
    .gsub(/((\-\s)|\-){4,}/, '---') # shorten multiple dashes to 3 dashes
    .gsub(/((\_\s)|\_){4,}/, '___') # shorten multiple underscores to 3 underscores
    .gsub(/\p{Sm}|\u2022|\u2023/, ' ') # remove bullets
    .gsub(/[^[[:alnum:]] | \p{Sc} | \p{Cc} | [[:punct:]]]/, ' ') # preserve accented letters and currency signs
    .gsub(/^(\v|\f|\n|\t|\s|\u2029){3,}/, "\n")
    .strip
  end
end

答案 3 :(得分:0)

以下查询将有助于删除mysql列数据中的回车符(换行符)

使用换行符的ASCII值,我可以将其替换为空

select replace(col_name, CHAR(13),'' ) from table;