MySQL: trim *两个* 空格和换行符
MySQL: trim *both* whitespace and newline characters
我有一个文本列,其内容在字符串的前后混合了换行符和空白字符。我正在尝试编写一个 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;
有没有办法消除前导字符和尾随字符的混合?
更新:我无法替换,因为我仍然希望 whitespace/newline 字符出现在内容中时出现。
我有一些字段带有空格,后面跟着一堆换行符,随后是更多 whitespace/newlines。因此,进退两难。
另一种方法是用空字符串替换'\n',然后trim它。这是代码:
SELECT TRIM(REPLACE(column, '\n','' )) from table;
或者,如果您愿意,您可以调用 trim 两次。
SELECT TRIM(TRIM('\n' FROM column)) from table;
在 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
很遗憾,TRIM(BOTH '\n' OR '\r' FROM myfield)
无法正常工作。所以下面的代码只有 trim 一个换行符 (\r\n
) 语句,而不是多个:
SELECT TRIM(TRIM(BOTH '\n' FROM(TRIM(BOTH '\r' FROM myfield)))) FROM mytable
注意上面的语句并不是trim<space>\r\n mytext
到mytext
,因为\r\n
不是开头的
MariaDB 的解决方案
如果您使用的是 MariaDB (https://mariadb.com/kb/en/mariadb/pcre/),您可以使用正则表达式来解决您的问题。以下表达式从文本中删除所有白色 space 前缀:
SELECT REGEXP_REPLACE(myfield, '^[\r\n ]*(.*)', '\1') FROM mytable
下面的查询将有助于删除 mysql
列数据
中的回车符 return(换行符)
使用新行字符的 ASCII 值我可以用任何东西替换它
select replace(col_name, CHAR(13),'' ) from table;
我有一个文本列,其内容在字符串的前后混合了换行符和空白字符。我正在尝试编写一个 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;
有没有办法消除前导字符和尾随字符的混合?
更新:我无法替换,因为我仍然希望 whitespace/newline 字符出现在内容中时出现。
我有一些字段带有空格,后面跟着一堆换行符,随后是更多 whitespace/newlines。因此,进退两难。
另一种方法是用空字符串替换'\n',然后trim它。这是代码:
SELECT TRIM(REPLACE(column, '\n','' )) from table;
或者,如果您愿意,您可以调用 trim 两次。
SELECT TRIM(TRIM('\n' FROM column)) from table;
在 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
很遗憾,TRIM(BOTH '\n' OR '\r' FROM myfield)
无法正常工作。所以下面的代码只有 trim 一个换行符 (\r\n
) 语句,而不是多个:
SELECT TRIM(TRIM(BOTH '\n' FROM(TRIM(BOTH '\r' FROM myfield)))) FROM mytable
注意上面的语句并不是trim<space>\r\n mytext
到mytext
,因为\r\n
不是开头的
MariaDB 的解决方案
如果您使用的是 MariaDB (https://mariadb.com/kb/en/mariadb/pcre/),您可以使用正则表达式来解决您的问题。以下表达式从文本中删除所有白色 space 前缀:
SELECT REGEXP_REPLACE(myfield, '^[\r\n ]*(.*)', '\1') FROM mytable
下面的查询将有助于删除 mysql
列数据
使用新行字符的 ASCII 值我可以用任何东西替换它
select replace(col_name, CHAR(13),'' ) from table;