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

问题描述 投票:0回答:2
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 time ssms concat
2个回答
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)

2
投票

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

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

这将同时适用于3和4个字符。

您可以将其扩展为:

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

并且它将适用于0-4个字符。

© www.soinside.com 2019 - 2024. All rights reserved.