KB.*_*KB. 122 mysql field removing-whitespace
我有一个包含两个字段的表(国家和ISO代码):
Table1
field1 - e.g. 'Afghanistan' (without quotes)
field2 - e.g. 'AF'(without quotes)
Run Code Online (Sandbox Code Playgroud)
在某些行中,第二个字段在开头和/或结尾处有空格,这会影响查询.
Table1
field1 - e.g. 'Afghanistan' (without quotes)
field2 - e.g. ' AF' (without quotes but with that space in front)
Run Code Online (Sandbox Code Playgroud)
是否有一种方法(在SQL中)通过表并查找/替换field2中的空格?
cwa*_*ole 252
你正在寻找TRIM.
UPDATE FOO set FIELD2 = TRIM(FIELD2);
Run Code Online (Sandbox Code Playgroud)
Chr*_*Sim 36
我从你的答案和其他链接组成的一般答案,它对我有用,我在评论中写道:
UPDATE FOO set FIELD2 = TRIM(Replace(Replace(Replace(FIELD2,'\t',''),'\n',''),'\r',''));
Run Code Online (Sandbox Code Playgroud)
等等
因为trim()不会删除所有的空格,所以最好更换所需的所有空白区域,然后修剪它.
希望我能帮助你分享我的答案:)
ami*_*jer 23
在使用此解决方案之前,请先了解用例:
在执行选择查询时,trim不起作用
这有效
select replace(name , ' ','') from test;
Run Code Online (Sandbox Code Playgroud)
虽然这不是
select trim(name) from test;
Run Code Online (Sandbox Code Playgroud)
mul*_*lya 16
为了清楚起见,TRIM默认只删除空格(不是所有空格).这是doc:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim
似乎当前的答案中没有一个实际上会从字符串的开头和结尾删除100%的空格.
正如其他帖子中所提到的,默认情况下TRIM
只删除空格 - 而不是制表符,换页等TRIM
.指定其他空白字符的s 组合可能会提供有限的改进,例如TRIM(BOTH '\r' FROM TRIM(BOTH '\n' FROM TRIM(BOTH '\f' FROM TRIM(BOTH '\t' FROM TRIM(txt)))))
.但是这种方法的问题是只能为特定TRIM
字符指定单个字符,并且这些字符仅从开头和结尾删除.因此,如果被修剪的字符串是类似的\t \t \t \t
(即替代空格和制表符),则TRIM
需要更多的s - 并且在一般情况下,这可以无限期地继续.
对于轻量级解决方案,应该可以通过循环字符串开头和结尾处的字符来编写一个简单的用户定义函数(UDF)来完成工作.但是我不打算这样做...因为我已经写了一个更重量级的正则表达式替换器,它也可以完成这项工作 - 并且可能因其他原因而有用,如本博文中所述.
演示
Rextester在线演示.特别是,最后一行显示其他方法失败但正则表达式方法成功.
SQL (为简洁省略了功能代码)
SELECT reg_replace(
reg_replace(txt,
'^[[:space:]]+',
'',
TRUE,
1,
0),
'[[:space:]]+$',
'',
TRUE,
1,
0) AS `trimmed txt`
FROM tbl;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
218628 次 |
最近记录: |