Most efficient method for adding leading 0's to an int in sql

前端 未结 5 521
渐次进展
渐次进展 2021-02-05 17:58

I need to return two fields from a database concatenated as \'field1-field2\'. The second field is an int, but needs to be returned as a fixed length of 5 with leading 0\'s. T

相关标签:
5条回答
  • 2021-02-05 18:18

    I would do it like this.

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

    Not necessarily all that "Easier", or more efficient, but better to read. Could be optimized to remove the need for "RIGHT"

    0 讨论(0)
  • 2021-02-05 18:24

    If you can afford/want to have a function in your database you could use something like:

    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
    
    0 讨论(0)
  • 2021-02-05 18:26

    Another way (without CAST or CONVERT):

    SELECT RIGHT(REPLACE(STR(@NUM),' ','0'),5)
    
    0 讨论(0)
  • 2021-02-05 18:28

    That is pretty much the way: Adding Leading Zeros To Integer Values

    So, to save following the link, the query looks like this, where #Numbers is the table and Num is the column:

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

    for negative or positive values

    declare @v varchar(6)
    select @v = -5
    
    SELECT case  when @v < 0 
    then '-' else '' end + RIGHT('00000' + replace(@v,'-',''), 5) 
    
    0 讨论(0)
  • 2021-02-05 18:35

    If you want to get a consistent number of total strings in the final result by adding different number of zeros, here is a little bit modification (for vsql)

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

    You can replace 9 by any number for your need!

    BRD

    0 讨论(0)
提交回复
热议问题