【问题标题】:Query to pad left of a field with 0's [duplicate]查询以 0 填充字段的左侧 [重复]
【发布时间】:2015-09-04 12:06:09
【问题描述】:

我一直在处理一个查询(在 sql Server TSQL 中),它用 0 填充数字的左侧,因此输出始终为 5 位。

所以:

Select MuNumber From Mytable

对于数据 11,011,2132,1111

Creates output like 
00011
02134
01111

我尝试了 Lpad 函数,但 0 的数量可能不同。

如果 Munumber 是 1,我们需要 0000,如果 MyNumber 是 34,我们需要 000

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    假设 MuNumber 是 VARCHAR 只需使用 RIGHT

    SELECT RIGHT('00000' + MuNumber, 5)
    FROM Mytable
    

    否则需要先转换

    SELECT RIGHT('00000' + CONVERT(VARCHAR(5), MuNumber), 5)
    FROM Mytable
    

    通常你可以使用这种模式:

    DECLARE @num INT = 10;
    
    SELECT RIGHT(REPLICATE('0', @num) + CONVERT(VARCHAR(5), MuNumber), @num)
    FROM Mytable
    

    【讨论】:

    • 非常好!我完全忘记了正确的功能是TSQ,让我测试一下。
    • 感谢 +1 的快速回答。
    【解决方案2】:

    试试这个

    select right('00000'+cast(col as varchar(5)),5) from table
    

    【讨论】:

      【解决方案3】:

      您可以使用用户定义的函数 udfLeftSQLPadding,您可以在 SQL Pad Leading Zeros 找到源代码

      在你的数据库上创建函数后,你可以如下使用它

      select 
          dbo.udfLeftSQLPadding(MuNumber,5,'0')
      from dbo.Mytable
      

      【讨论】:

        【解决方案4】:

        另一种选择:

        declare @n int = 6
        
        select stuff(replicate('0', @n), 6-len(n), len(n), n)
        from (values('123'), ('2493'), ('35')) as x(n)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-03
          • 2013-07-06
          • 1970-01-01
          相关资源
          最近更新 更多