将数字转换为 0 填充字符串

Convert number to 0 padded string

CASE 
   WHEN LEN(TIME1) = 3 THEN (RIGHT('0' + CAST(TIME1 AS VARCHAR(4)), 4)) 
END AS TIME1

此代码有效,因为当值为 812 时,它将 return 0812。但有时它是 1012,因此该值被 return 编为 null。

我写了

CASE 
   WHEN LEN(TIME1) = 3 
      THEN (RIGHT('0' + CAST(TIME1 AS VARCHAR(4)), 4)) 
      ELSE TIME1 
END AS TIME1

但这只会让我重新得到 812 和 1012。

我正在尝试将其转换为 4 个字符,以便我可以将其转换为 hh:mm,然后与日期列连接。

您需要将值转换为字符串。但是您根本不需要 case 。只需使用:

RIGHT('0' + CAST(TIME1 as VARCHAR(4)), 4)

这适用于 3 个和 4 个字符。

您可以将其扩展为:

RIGHT('0000' + CAST(TIME1 as VARCHAR(4)), 4)

它适用于 0-4 个字符。

如果您使用 SQL 服务器(基于 SSMS 标记),那么 "normal" 获取带前导零的数字的方法如下:

RIGHT('0000'+CONVERT(varchar(4),YourColumn),4)   

您可以使用 REPLICATE 以获得更具可扩展性或可参数化的版本:

RIGHT(REPLICATE('0',4)+CONVERT(varchar(4),YourColumn),4)

您也可以使用 CONCAT 来避免显式转换:

RIGHT(CONCAT(REPLICATE('0',4),YourColumn),4)