2016-07-12 13 views
1

私はの時間がvaluesです。整数値をSQL Serverの時間値(AM/PM)に変換します

declare @timing varchar(5)='15:02' 

declare @time time=cast(@timing as time) 
select convert(varchar(50),@time, 100) 

しかし、これはvarcharに変換するvalが必要です。私はこのロジックを試してみました

val hour 
--------------- 
9  9:00 AM 
19  7:00 PM 
10 10:00 AM 
19  7:00 PM 
14  2:00 PM 

:ここに示したように、私は、AM/PM形式に時間値を変換する必要があります。これを行うには、他の方法やinbuilt関数をSQL Serverで利用できますか?

+1

「* convert *」はどういう意味ですか?クエリ出力のデータベースまたは書式を置換しますか? –

+2

あなたはどのバージョンのSQL Serverを使用していますか? – Sankar

+0

@ PM77-1はいAM/PM形式の出力が必要です – bmsqldev

答えて

1
SELECT FORMAT(DATEADD(hh,val,'00:00:00'),'hh:mm tt') 
FROM YourTable 
+0

FORMATはSQL Server 2012以上でのみ使用できます。 – Sankar

2

は、以下のことを試してみてください。

SELECT TIMEFROMPARTS(val,0,0,0,0) 
    FROM [table]; 
+1

'TIMEFROMPARTS'関数はSQL 2012以降でのみ使用できます。 –

+1

質問に使用されているバージョンに関する情報が見つかりませんでした。 ;-)とにかく、2012年になければ、私はvarcharに変換する方法がないと思います。 – Tyron78

+1

あなたが間違っていると言っているわけではありません - OPがどのバージョンに適用されているかを知っていることを確認するだけです。 –

1

select CONVERT(varchar(15),CAST(cast(@val as nvarchar) + ':00:00.0000000' AS TIME),100)

1

あなたが関数を作成することができます複雑な場合。

その後
CREATE FUNCTION dbo.fn_StringHourToAmPm (@timing VARCHAR(250)) 
RETURNS VARCHAR(250) 
AS BEGIN   

    DECLARE @time TIME = CAST(@timing AS TIME) 
    DECLARE @Output NVARCHAR(50) 
    select @Output = CONVERT(VARCHAR(50),@time, 100) 

    RETURN @Output 
END 

SELECT dbo.fn_StringHourToAmPm('15:02') -- 3:02PM 
2

次のことを試してみてください。

declare @timing varchar(5)='14' 

declare @time time=cast(case when CHARINDEX(':',@timing)=0 then @timing + ':00' else @timing end as time) 
select convert(varchar(50),@time, 100) 

それとも

Select convert(varchar(50),cast(Cast(val as varchar) + ':00' as time),100) FROM YourTable 
1

FORMATを使用しない、これは、SQL Server 2008上で動作するはず以降:

declare @T table (val int); 

insert into @T values (0),(9),(12),(19); 

select val, 
replace(convert(varchar, CAST(CONCAT(val%24,':00') as time), 109),':00.0000000',' ') as [hour] 
from @T; 

基本的に、INTをVARCHARにキャストして、109の定義済みの形式でキャストしてください。

または日時にINTを変換後の形式を使用して経由:

select val, FORMAT(DATEADD(HH,val%24,0),'h:mm tt') as [hour] from @T; 

両方の方法は戻ります:弾性率(val%24)を添加したこと

val hour 
0 12:00 AM 
9 9:00 AM 
12 12:00 PM 
19 7:00 PM 

注意。それは23時間以上働くようにするだけです。

関連する問題