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

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

Table1 field1 - eg 'Afghanistan' (without quotes) field2 - eg 'AF'(without quotes) 

在一些行中,第二个字段在开始和/或结束处有空白,这影响了查询。

 Table1 field1 - eg 'Afghanistan' (without quotes) field2 - eg ' AF' (without quotes but with that space in front) 

有没有一种方法(在SQL中)通过表并find/replace字段2中的空格?

你正在寻找TRIM 。

 UPDATE FOO set FIELD2 = TRIM(FIELD2); 

修剪select查询时不起作用

这工作

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

虽然这不

 select trim(name) from test; 

我从你的答案和其他链接构成的一般答案,它为我工作,我写了评论是:

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

等等

由于trim()不会删除所有的空白,所以最好是replace所有你想要的空白,而不是修剪它。

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

只是要清楚,TRIM默认只删除空格 (不是全部空格)。 这里是文档: http : //dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim

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

删除字段值左侧的空格

UPDATE表SET field1 = LTRIM(field1);

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

删除字段值右侧的空格

UPDATE table SETfield1 = RTRIM(field1);

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

问了5年多了,现在的答案似乎没有任何一个从string的开始和结尾删除100%的空白。

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

对于一个轻量级的解决scheme,应该可以编写一个简单的用户定义函数(UDF)来完成作业,方法是遍历string的开始和结束处的字符。 但我不打算这样做…因为我已经写了一个更重量级的正则expression式替代品 ,也可以做这个工作(并可能会出于其他原因有用)。 为了简洁起见,我不会在这里详细讨论,但是在这个SQL Fiddle演示中可以看到它的修剪。

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

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

返回字段为'query-string'的行

我需要修改具有名字和姓氏的主键列中的值,所以我不想修剪所有的空格,因为这将删除名字和姓氏之间的空格,我需要保留这些空格。 对我有效的是…

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

要么

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

要么

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

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

您可以使用ltrim或rtrim清除右侧或左侧的空白或string。

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

selectSUBSTRING_INDEX('1234 243','',1);

返回“1234”