2017-08-14 52 views
1

我有一個包含一個整數的小時和分鐘列的表。 (還有其他欄目)。現在,我想從這個表創建一個視圖,並且我需要將這兩列的數據組合成一個帶有':'符號的列。例如,如果某個記錄的小時數爲8,分鐘數爲10,則組合列應包含08:10。一位數字後面跟着一個前導0,最初在小時和分鐘列中不存在。SQL,連接一個字符,並根據值導致0 0

我能成功的整數,轉換爲varchar並連接所有的數字「:」用下面的SQL命令

/* Combined Column name "Time" */ 
SELECT 
    Cast([Hour] as varchar) + ':' + Cast([Minute] as varchar) As Time 
FROM Table1 

,但我不知道我怎麼可以添加前導0到這僅在數字是一位數字。有人可以幫助我嗎?謝謝。

+2

可能的重複[填充前導零的字符串,所以它在SQL Server 2008中的長度爲3個字符](https://stackoverflow.com/questions/16760900/pad-a-string-with-leading-zeros-so-它的3字符長在SQL服務器2008) – Siyual

+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 

希望它可以幫助你! :)

+0

謝謝大家,但我決定去用這個。這接近我已有的!謝謝! –

0

使用timefromparts()(SQL服務器2012+)創建合適的時間價值:

​​

然後,您可以格式化這個作爲一個字符串,如果這是你真正想做的事:

select convert(varchar(5), timefromparts(hour, minute, 0, 0, 0)) 
0

您可以創建標量函數來填充字符:

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變量替換您的名字列。

+0

這真的不是一個好主意,請檢查第一個有問題的評論,以便更簡單地執行此操作。 –

+0

我認爲在SQL 2008中,它更適合使用像這樣的標量函數,以實現重用性。 –

+0

你的意思是'SELECT RIGHT('000'+ ISNULL(field,''),3)'?是最好的一個。同意。 –