MySQL:修剪 *both* 空格和换行符

kulphzqa  于 2023-04-19  发布在  Mysql
关注(0)|答案(5)|浏览(177)

我有一个文本列,它的内容在字符串的前后混合了换行符和空格字符。我试图编写一个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:我不能替换,因为我仍然希望空格/换行符在内容中出现时出现。

我有一些字段,一个空格后面跟着一堆换行符,这些换行符后面跟着更多的空格/换行符。

wribegjk

wribegjk1#

不幸的是,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
tvmytwxo

tvmytwxo2#

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

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

或者,如果你喜欢,你可以调用trim两次。

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

2g32fytz3#

下面的查询将帮助删除mysql列数据中的回车符(换行符
使用新行字符的ASCII值,我可以将其替换为空

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

zzzyeukh4#

最后用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
mf98qq94

mf98qq945#

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

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

相关问题