将数字转换为 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)
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)