CASE
WHEN LEN(TIME1) = 3 THEN (RIGHT('0' + CAST(TIME1 AS VARCHAR(4)), 4))
END AS TIME1
该代码有效,因为当值是812时,它将返回0812。但是有时它是1012,因此该值将返回为空。
我写了
CASE
WHEN LEN(TIME1) = 3
THEN (RIGHT('0' + CAST(TIME1 AS VARCHAR(4)), 4))
ELSE TIME1
END AS TIME1
但这又给了我812和1012。
我正在尝试将其转换为4个字符,以便可以将其转换为hh:mm,然后与日期列进行合并。
答案 0 :(得分:2)
您需要将值转换为字符串。但是,您根本不需要case
。只需使用:
RIGHT('0' + CAST(TIME1 as VARCHAR(4)), 4)
这将同时适用于3个和4个字符。
您可以将其扩展为:
RIGHT('0000' + CAST(TIME1 as VARCHAR(4)), 4)
它将适用于0-4个字符。
答案 1 :(得分:1)
如果您使用的是SQL Server(基于SSMS标记),那么“正常”的方式来获取带有前导零的数字将是这样的:
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)