如何删除MySQL字段中的前导和尾随空格?

时间:2011-07-28 11:25:46

标签: mysql field removing-whitespace

我有一个包含两个字段(国家和ISO代码)的表:

Table1

   field1 - e.g. 'Afghanistan' (without quotes)
   field2 - e.g. 'AF'(without quotes)

在某些行中,第二个字段在开头和/或结尾处有空格,这会影响查询。

Table1

   field1 - e.g. 'Afghanistan' (without quotes) 
   field2 - e.g. ' AF' (without quotes but with that space in front)

是否有办法(在SQL中)遍历表并查找/替换field2中的空格?

11 个答案:

答案 0 :(得分:243)

您正在寻找TRIM

UPDATE FOO set FIELD2 = TRIM(FIELD2);

答案 1 :(得分:34)

我根据您的答案和其他链接撰写的一般答案,它对我有用,我在评论中写道:

 UPDATE FOO set FIELD2 = TRIM(Replace(Replace(Replace(FIELD2,'\t',''),'\n',''),'\r',''));

因为trim()不会删除所有空格,所以最好更换你想要的所有空格而不是修剪它。

希望我能帮助你分享我的答案:)

答案 2 :(得分:26)

在使用此解决方案之前,请先了解用例:

修剪在执行选择查询时不起作用

这有效

select replace(name , ' ','') from test;

虽然这不是

select trim(name) from test;

答案 3 :(得分:16)

为了清楚起见,TRIM默认仅删除空格(不是所有空格)。以下是文档:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim

答案 4 :(得分:9)

目前的答案似乎都没有从字符串的开头和结尾删除100%的空格。

正如其他帖子中所提到的,默认TRIM仅删除空格 - 而非标签,换页等。指定其他空格字符的TRIM组合可能会提供有限的改进,例如: TRIM(BOTH '\r' FROM TRIM(BOTH '\n' FROM TRIM(BOTH '\f' FROM TRIM(BOTH '\t' FROM TRIM(txt)))))。但是这种方法的问题是只能为特定的TRIM指定单个字符,并且这些字符仅从开头和结尾删除。因此,如果被剪裁的字符串类似于\t \t \t \t(即替换空格和制表符),则需要更多TRIM - 并且在一般情况下,这可以无限期地继续。

对于轻量级解决方案,应该可以通过循环字符串开头和结尾处的字符来编写一个简单的用户定义函数(UDF)来完成工作。但是我不打算这样做......因为我已经写了一个更重量级的regular expression replacer也可以完成这项工作 - 并且可能因其他原因而有用,如{{3}中所述}。

<强>演示

this blog post。特别是,最后一行显示其他方法失败但正则表达式方法成功。

SQL (为简洁省略了功能代码)

SELECT reg_replace(
         reg_replace(txt,
                     '^[[:space:]]+',
                     '',
                     TRUE,
                     1,
                     0),
         '[[:space:]]+$',
         '',
         TRUE,
         1,
         0) AS `trimmed txt`
FROM tbl;

答案 5 :(得分:3)

此语句将删除并更新数据库的字段内容

删除字段值左侧的空格

UPDATE表SET field1 = LTRIM(field1);

离。 UPDATE成员SET firstName = LTRIM(firstName);

删除字段值右侧的空格

UPDATE表SETfield1 = RTRIM(field1);

离。 UPDATE成员SET firstName = RTRIM(firstName);

答案 6 :(得分:1)

如果您需要在select查询中使用trim,您还可以使用正则表达式

SELECT * FROM table_name WHERE field RLIKE ' * query-string *'

返回包含'query-string'

字段的行

答案 7 :(得分:1)

我需要修剪具有名和姓的主键列中的值,因此我不想修剪所有空格,因为这会删除名字和名字之间的空格,我需要保留它。对我有用的是......

UPDATE `TABLE` SET `FIELD`= TRIM(FIELD);

UPDATE 'TABLE' SET 'FIELD' = RTRIM(FIELD);

UPDATE 'TABLE' SET 'FIELD' = LTRIM(FIELD);

请注意,FIELD的第一个实例是单引号,但第二个实例根本不是引号。我不得不这样做,或者它给了我一个语法错误,说我在引号中都有一个重复的主键。

答案 8 :(得分:0)

您可以使用ltrim或rtrim清除右侧或左侧的空格或字符串。

答案 9 :(得分:0)

您可以使用以下sql, UPDATE TABLE SET Column = replace(Column,'','')

答案 10 :(得分:-4)

我知道它已经被接受了,但对于像我这样寻找“删除所有空格”的人(不仅仅是在字符串的开头和结尾):

选择SUBSTRING_INDEX('1234 243','',1);

返回'1234'