【问题标题】:Remove trailing spaces and add them as leading spaces删除尾随空格并将它们添加为前导空格
【发布时间】:2016-08-11 22:13:04
【问题描述】:

我想从列中的表达式中删除尾随空格并将它们添加到表达式的开头。因此,例如,我目前有以下表达式:

Sample_four_space    
Sample_two_space  
Sample_one_space 

我想将此列转换为:

    Sample_four_space
  Sample_two_space
 Sample_one_space

我试过这个表达方式:

UPDATE My_Table
SET name = REPLACE(name,'% ',' %')

但是,我想要一个更强大的查询,它适用于任何长度的尾随空格。你能帮我开发一个查询来删除所有尾随空格并将它们添加到表达式的开头吗?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    如果您知道所有空格都在末尾(如您的示例所示,那么您可以计算它们并将它们放在开头:

    select concat(space(length(name) - length(replace(name, ' ', ''))),
                  replace(name, ' ', '')
                 )
    

    否则更好的解决方案是:

    select concat(space( length(name) - length(trim(trailing ' ' from name)) ),
                  trim(trailing ' ' from name)
                 )
    

    或:

    select concat(space( length(name) - length(rtrim(name)) ),
                  rtrim(name)
                 )
    

    这两种情况都计算空格数(在或末尾)。然后space() 函数复制空格,concat() 将它们放在开头。

    【讨论】:

    • 可能值得注意的是,使用 replace 将替换字符串中间的所有空格。后一种解决方案确实有效,即使它们在开头或中间是空格,但 RTRIM() 也可以有效地使用。
    • 对了,有没有办法不去掉字符串中间的空格?
    • @kbball 。 . .第二种方法。示例数据只是在末尾有空格,所以我首先想到了。
    • 明白了。由于某种原因 Trim(trailing ' '... 为我抛出了一个错误,但 RTRIM() 完成了这项工作
    猜你喜欢
    • 2014-10-31
    • 2013-09-23
    • 2019-12-16
    • 2012-02-28
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2018-10-04
    相关资源
    最近更新 更多