代码之家  ›  专栏  ›  技术社区  ›  Mike Bennett

在SQL中向int添加前导0的最有效方法

  •  9
  • Mike Bennett  · 技术社区  · 15 年前

    我需要从连接为“field1-field2”的数据库返回两个字段。第二个字段是int,但需要以固定长度5返回,前导为0。我使用的方法是:

    SELECT Field1 + '-' + RIGHT('0000' + CAST(Field2 AS varchar),5) FROM ...
    

    有更有效的方法吗?

    5 回复  |  直到 6 年前
        1
  •  29
  •   SQLMenace    15 年前

    基本上是这样的: Adding Leading Zeros To Integer Values

    因此,要保存以下链接,查询如下所示,其中 #Numbers 是桌子吗? Num 是专栏:

       SELECT RIGHT('000000000' + CONVERT(VARCHAR(8),Num), 8) FROM #Numbers
    

    对于负值或正值

    declare @v varchar(6)
    select @v = -5
    
    SELECT case  when @v < 0 
    then '-' else '' end + RIGHT('00000' + replace(@v,'-',''), 5) 
    
        2
  •  6
  •   DJ.    15 年前

    另一种方法(不使用强制转换或转换):

    SELECT RIGHT(REPLACE(STR(@NUM),' ','0'),5)
    
        3
  •  2
  •   Petros    15 年前

    如果您能够负担/想要在数据库中拥有一个函数,您可以使用如下内容:

    CREATE FUNCTION LEFTPAD
               (@SourceString VARCHAR(MAX),
                @FinalLength  INT,
                @PadChar      CHAR(1)) 
    RETURNS VARCHAR(MAX)
    AS
    BEGIN
      RETURN
        (SELECT Replicate(@PadChar, @FinalLength - Len(@SourceString)) + @SourceString)
    END
    
        4
  •  1
  •   Mitchel Sellers    15 年前

    我会这样做的。

    SELECT RIGHT(REPLICATE('0', 5) + CAST(Field2 AS VARCHAR(5),5) 
    

    不一定所有这些“更容易”,或更有效,但更好的阅读。可以优化以消除对“权利”的需求

        5
  •  0
  •   StealthRT    6 年前

    如果您想通过添加不同数量的零在最终结果中得到一致数量的字符串,这里有一点修改(对于vsql)

    SELECT 
      CONCAT(
        REPEAT('0', 9-length(TO_CHAR(var1))), 
        CAST(var1 AS VARCHAR(9))
      ) as var1
    

    您可以根据需要将9替换为任意数字!

    BRD