【问题标题】:Padding with leading and trailing spaces all values of column in SQL用前导和尾随空格填充 SQL 中列的所有值
【发布时间】:2014-10-11 05:36:18
【问题描述】:

对于表中的列,我想一次性为该列的所有值添加前导和尾随空格。例如,table Employee(Name varchar(5))。由于表在一行中有5 个字符,因此在执行查询时,它应该更新为一行中的7 个字符。事实上,前导和尾随空格应填充到列中的值。

我需要一个 SQL 查询。

【问题讨论】:

  • 填充通常是一个格式化问题,通常不应该在数据库中完成(它属于表示/报告层)。 为什么你这样做?你想解决什么更大范围的问题?

标签: sql database oracle db2 sybase


【解决方案1】:

数据来自哪里?如果您固定列的宽度,则源数据中的任何前导空格都应保留。 (免责声明:我在 SQL Server 2012 中工作,而不是 Oracle。) 我遇到了一个问题,我将数据从 SQL 服务器发送到 AS400 DB2 数据库,而从数据运行的程序期望事情在某些列中排列。修剪前导空格会使整行不对齐。当我的 SQL Server 数据类型为 NVARCHAR(20) 时,“VAR”部分修剪了前导空格。使它成为 NCHAR(20) 解决了这个问题。 DB2 数据库删除了这些空格,所以我在这方面遇到了问题。

【讨论】:

    【解决方案2】:

    由于需要填充的列是可变长度的,我不认为在之前或之后硬编码空格是正确的解决方案。如果列中的数据长度为 3,则在数据前后填充 1 个空格仍将导致长度为 5。由于 OP 未指定所有数据的长度是否为 5,因此需要不同的方法.根据您希望添加空格的方式,您可以尝试以下操作(这会在数据之前添加 1 个空格并将剩余空格填充到末尾):

    Declare @Name varchar(5) = 'Bob'        
    Select ' ' + @Name + REPLICATE(' ',(6 - LEN(@NAME))) as NewName
    

    这导致名称前有 1 个空格,名称后有 3 个空格。

    【讨论】:

      【解决方案3】:

      在 Oracle 中,这将在“名称”列中的每个值前面放置一个空格,并用空格右填充,总长度为 7 个字符:

      update employee
      set name = rpad(' '||name,7);
      

      您需要先更改表格以容纳额外的空间。

      alter table employee
      modify
      name varchar2(7);
      

      【讨论】:

      • UPDATE 语句是非常标准的 SQL,因此它也应该适用于其他数据库。 ALTER 语句可能有点不同。
      【解决方案4】:
      select ' '||Name||' ' from Employee
      

      如果要更新表格

      update EMPLOYEE set Name = ' ' || Name || ' '
      

      【讨论】:

        【解决方案5】:
        UPDATE EMPLOYEE
        SET Name = ' ' || Name || ' '
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-10
          • 1970-01-01
          • 2021-11-07
          • 2011-08-10
          • 2018-10-04
          • 2013-03-04
          • 1970-01-01
          相关资源
          最近更新 更多