将前导0添加到sql中的int的最有效方法

时间:2009-04-22 19:52:18

标签: sql sql-server

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

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

有更有效的方法吗?

5 个答案:

答案 0 :(得分:31)

这几乎就是这样: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) 

答案 1 :(得分:6)

另一种方式(没有CAST或CONVERT):

SELECT RIGHT(REPLACE(STR(@NUM),' ','0'),5)

答案 2 :(得分:2)

如果你能负担得起/希望在你的数据库中拥有一个功能,你可以使用类似的东西:

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

答案 3 :(得分:1)

我会这样做。

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

不一定都是“更容易”,或更高效,但更好阅读。可以进行优化以消除对“正确”的需求

答案 4 :(得分:0)

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

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

您可以根据需要以任何数字替换9!

BRD