2009-05-22 11 views
5

時間と分の10進数表現に整数分の整数を整理するクリーンでシンプルな方法がありますか?これをサポートするT-SQLのTimespanのようなものはないというのは非常に残念です。T-SQLの10進数で分と時間をフォーマットする

私が70分を持っていれば、それは1時間10分の表現に換算したいと思います。すなわち、1.10です。私はまた、varcharまたは後ろのゼロが正しい位置に保持されるようにするために何かを保持したいと思うでしょう。

これは、SQLでカスタム関数として作成できるので、別のクエリから再利用できるようになっていますか?

答えて

17

時間を取得するには、60で除算します。残りの分を取得するには、合計分60を使用するか、合計分と時間の差60を使用します。小数点の右、100.0で割る:あなたはa)は、あなたが任意のより多くの計算を行うことができないので、この方法は悪い考えである時間の長さを格納し、末尾のゼロと私見を失うこと

SELECT minutes/60 + (minutes % 60)/100.0 ... 

は注意b)誰かがこのコードを後で見ると混乱するだろう。

は、次のような文字列表現を使用することをオフにはるかに優れている(と私はの使用をお勧めします「:」「」の代わりに、再び、これは数ないを意味する):

SELECT CAST((minutes/60) AS VARCHAR(8)) + ':' + 
     RIGHT('0' + CAST((minutes % 60) AS VARCHAR(2)), 2) ... 

カスタム関数を作成する限り、ストアドプロシージャを作成して他のコードから呼び出すことができます。ストアドプロシージャは、各データベースに作成する必要があります。

あなたが好きでTimeSpanのような行を返さない限り、ストアドプロシージャを作成することはやっても分かりません。

+1

整数を分けて小数点を返すことを望むならば、結果を適切なデータ型に入れるべきです。 – TheTXI

+0

@TheTXI良い点 –

+0

私はあなたが私が意味するものを得るとは思わない。私に70分があるなら、それを1時間10分、すなわち1:10の表現に変換したい。 これを明確にするために私の質問に言い換えるよ –

1
select 70/60 + (70 % 60)/100.0 
0

が、私は同じことをやろうとしばらく過ごし、HERESに私はそれを行っ方法:

convert(varchar, cast((RouteMileage/@average_speed) as integer))+ ':' + convert(varchar, cast((((RouteMileage/@average_speed) - cast((RouteMileage/@average_speed) as integer)) * 60) as integer)) As TravelTime, 

dateadd(n, -60 * CAST((RouteMileage/@average_speed) AS DECIMAL(7,2)), @entry_date) As DepartureTime 

OUTPUT:SQL Server 2012ので

DeliveryDate    TravelTime    DepartureTime 
2012-06-02 12:00:00.000  25:49   2012-06-01 10:11:00.000 
+1

複数の異なる質問に同じ回答を追加していますか?コピーしてエラーや何かを貼り付けますか?そして、あなたが他人の答えに新しいものを追加しないと、3歳のポストを復活させる必要はないと考えてください。あなたの努力に感謝します。 – fancyPants

0
CAST(Duration/60 + (duration % 60) /100.0 as Decimal(10,1)) 
-1

SELECT format(DATEADD(minute, 70, 0), N'hh\.mm') 
関連する問題