MySQL:去除空格和换行符

5

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

以下查询修剪了空格:

SELECT TRIM(column)
FROM table;

这个函数可以去掉换行符:

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

我也尝试了这个答案,但它并不起作用:

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

有没有一种方法可以去除前导和尾随字符混合的方式?
更新:我不能替换,因为当空格/换行符在内容内出现时,我仍希望它们存在。
我有一些字段,其中一个空格后面跟着一堆换行符,然后是更多的空格/换行符。这就是问题所在。

当评论表明答案已经失效时,不确定为什么您还要尝试那个答案。 - Lightness Races in Orbit
所以为了让事情更加明确,你的领域看起来像是:(1)一堆空白和换行符的前言,接着是(2)实际内容,其中可能包含更多的空白和换行符,最后是(3)尾随的空白和换行符?而你想要去除(1)和(3)? - lurker
那完全正确。 - ashish
5个回答

5

很遗憾,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
一种替代方法是将 '\n' 替换为空字符串,然后再修剪它。以下是代码:
```python text = text.replace('\n', '').strip() ```
SELECT TRIM(REPLACE(column, '\n','' )) from table;

或者,如果您喜欢的话,可以调用两次 trim。

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

3
我无法替换(REPLACE),因为我仍希望在内容_内部_出现空格/换行字符时它们保持存在。由于我的某些字段具有空格后跟一堆换行符,随后又跟随更多的空格,所以SELECT TRIM(TRIM('\n' FROM column)) from table;不能使用。因此陷入了困境。 - ashish

1
以下查询将帮助删除mysql列数据中的回车符(换行符)。
使用新行字符的ASCII值,我可以将其替换为空。
select replace(col_name, CHAR(13),'' ) from table;

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

0

您可以使用REGEXP_REPLACE来修剪两端,这是我用来修剪换行符\r和\n、缩进字符\t和空格的方法。

SELECT REGEXP_REPLACE(REGEXP_REPLACE(mycolumn, '^[\r\n\t ]+', ''), '[\r\n\t ]+$', '') FROM mytable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接