2017-08-14 2 views
1

私は列が時間と分の両方のテーブルに整数を含みます。 (他の列もあります)。今、私はこのテーブルからビューを作成したい、私はこれらの2つの列のデータを ':'記号で1つの列に結合する必要があります。たとえば、レコードの時間が8、分が10の場合、結合列には08:10が含まれている必要があります。 1桁の数字の後に先行する0を付ける必要がありますが、最初は時および分の列には存在しません。SQLでは、値に応じて文字と先頭の0を連結します。

私は正常にvarchar型に整数を変換して数値を連結することができました。次のSQLコマンドを使用して、

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

が、私は場合にのみ、これに0をリード追加する方法を確認していません「」数字は1桁です。誰かがこれで私を助けてくれますか?ありがとうございました。

+2

[SQL Server 2008では3桁の先行ゼロを含む文字列を埋め込みます](https://stackoverflow.com/questions/16760900/pad-a-string-with-leading-zeros-so- 3文字のロングSQL Server 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

皆さんありがとうございますが、私はこの1つに行くことにしました。これは私がすでに持っていたものに近いものでした!ありがとう! –

0

使用timefromparts()(SQL Serverは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) 'を意味しますか?はいいいえ。合意した –

関連する問題