SQL,根据值连接字符和前导0

SQL,根据值连接字符和前导0,sql,sql-server,Sql,Sql Server,我有一个包含Hour和Minute列的表,它们都包含一个整数。(还有其他列)。现在,我想从这个表中创建一个视图,我需要将这两列的数据合并成一列,并使用“:”符号。例如,如果一条记录的小时为8,分钟为10,则组合列应包含08:10。一位数字后面需要跟一个前导0,它最初不存在于小时和分钟列中 我成功地将整数转换为varchar,并使用以下SQL命令将数字与“:”连接起来 /* Combined Column name "Time" */ SELECT Cast([Hour] as varchar

我有一个包含Hour和Minute列的表,它们都包含一个整数。(还有其他列)。现在,我想从这个表中创建一个视图,我需要将这两列的数据合并成一列,并使用“:”符号。例如,如果一条记录的小时为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添加到该数字中。有人能帮我吗?谢谢。

使用(SQL Server 2012+)创建适当的时间值:

select timefromparts(hour, minute, 0, 0, 0)
然后,您可以将其格式化为字符串,如果这是您真正想要做的:

select convert(varchar(5), timefromparts(hour, minute, 0, 0, 0))
另一种方法:

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

希望它能帮助你!:)

您可以创建标量函数来填充字符:

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
@minute
变量替换列名。

有问题的示例可能与重复的列名相同,以设置Gordon答案的时间格式,但对于一般技巧,如何在前面的评论中添加填充零检查链接。这确实不是一个好主意,检查第一条注释,了解更简单的技巧。我认为在SQL 2008中,为了可重用性,最好使用这样的标量函数。您的意思是'SELECT RIGHT('000')+ISNULL(field'),'3')?是的,最好的。同意。谢谢大家,但我决定用这个。这是接近我已经有了!谢谢