我有一个包含小时和分钟列的表,两者都包含一个整数。 (还有其他专栏)。现在,我想从这个表创建一个视图,我需要将这两列的数据组合成一个带有':'符号的列。例如,如果记录的小时为8,分钟为10,则组合列应包含08:10。一位数字后面必须跟一个前导0,最初在小时和分钟列中不存在。
我成功地将整数转换为varchar,并使用以下SQL命令将数字与':'连接
/* Combined Column name "Time" */
SELECT
Cast([Hour] as varchar) + ':' + Cast([Minute] as varchar) As Time
FROM Table1
但我不知道如果数字是一位数,我怎么能将前导0添加到此。有人可以帮我这个吗?谢谢。
答案 0 :(得分:1)
另一种方法:
SELECT
(CASE WHEN LEN(Cast([Hour] as varchar))=1 THEN '0'+Cast([Hour] as varchar) ELSE Cast([Hour] as varchar) END) + ':' +
(CASE WHEN LEN(Cast([Minute] as varchar))=1 THEN '0'+Cast([Minute] as varchar) ELSE Cast([Minute] as varchar) END) As Time
FROM Table1
希望它可以帮到你! :)
答案 1 :(得分:0)
使用timefromparts()
(SQL Server 2012+)创建适当的时间值:
select timefromparts(hour, minute, 0, 0, 0)
然后,您可以将其格式化为字符串,如果这是您真正想要做的事情:
select convert(varchar(5), timefromparts(hour, minute, 0, 0, 0))
答案 2 :(得分:0)
您可以创建标量函数来填充字符:
ORDER BY
以下是如何使用它的示例:
CREATE FUNCTION dbo.PadNumbersOnLeft (@NumberInput INT, @NoOfCharsToPad tinyint)
RETURNS VARCHAR(250)
AS BEGIN
DECLARE @ResultString VARCHAR(250)
SET @ResultString = LTRIM(@NumberInput)
IF(@NoOfCharsToPad > LEN(@ResultString))
SET @ResultString = REPLICATE('0', @NoOfCharsToPad - LEN(@ResultString)) + @ResultString;
RETURN @ResultString;
END;
您可以使用declare @hour int = 8
declare @minute int = 35
select
[dbo].[PadNumbersOnLeft] (@hour, 2) + ':' + [dbo].[PadNumbersOnLeft] (@minute, 2)
和@hour
变量替换列名称。