我需要从连接为'field1-field2'的数据库中返回两个字段。第二个字段是一个int,但需要返回固定长度5,前导0。我正在使用的方法是:
SELECT Field1 + '-' + RIGHT('0000' + CAST(Field2 AS varchar),5) FROM ...
有更有效的方法吗?
答案 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