CASE
WHEN LEN(TIME1) = 3 THEN (RIGHT('0' + CAST(TIME1 AS VARCHAR(4)), 4))
END AS TIME1
此代码有效,因为当值是812时,它将返回0812。但是有时它是1012,所以该值将返回为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,然后与日期列进行合并。
如果您使用的是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)
您需要将值转换为字符串。但是您根本不需要case
。只需使用:
RIGHT('0' + CAST(TIME1 as VARCHAR(4)), 4)
这将同时适用于3和4个字符。
您可以将其扩展为:
RIGHT('0000' + CAST(TIME1 as VARCHAR(4)), 4)
并且它将适用于0-4个字符。