SQL,根据值

时间:2017-08-14 13:46:46

标签: sql sql-server

我有一个包含小时和分钟列的表,两者都包含一个整数。 (还有其他专栏)。现在,我想从这个表创建一个视图,我需要将这两列的数据组合成一个带有':'符号的列。例如,如果记录的小时为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添加到此。有人可以帮我这个吗?谢谢。

3 个答案:

答案 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变量替换列名称。