如何删除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”