2016-12-05 4 views
0

私は音楽ファイル&のデータベースを作成しています。私は、列の1つをファイルの "期間"または "ランタイム"にしたいと思います。 SSMSに分と秒だけを表示する方法はありますか?SSMSでのみ分と秒の時間値

私は 0時17分30秒のように見えるし、むしろそれが17:30として表示されてい列を避けるためにしようとしています。

+4

プレゼンテーションは、ストレージとは異なります。データは一度保存されると何も表示されません。あなたがそれをある方法で提示したいなら、あなたのプレゼンテーション層をそのように提示してください。 –

+0

それは私がデータを入力するために使用したいフォーマットです。この場合、ストレージとプレゼンテーションは同じです。 –

+0

それをvarcharフィールドとして格納し、正しい形式のデータエントリを検証することを確認します。唯一の欠点は、必要な場合には、継続時間に基づいて数学やソートを行うことが難しくなることです。 – Jim

答えて

2

複数の方法で音楽/ビデオ断片の時間を保存することができます。私はそれを最悪に保存する最良の方法だと思うものからいくつかを挙げます:

  • INTとして。必要な解像度で長さを秒またはミリ秒で保存します。 2^31-1秒/ミリ秒まで上がることができます。
  • TIMEとして。時間は、23:59:59.9999999時間に制限されています。解像度はTIME列の幅に依存します。あなたの音楽/ビデオ断片が24時間より長い場合に問題があります。
  • VARCHARとして。あなたが今までにやってみたいことがすべて存在するなら、それは本当に良い記憶タイプではありません。音楽/動画の時間に基づいてクエリを実行する場合は、これを別のタイプに変換する必要があります。好ましくはありません。

VARCHARは、これ以上フォーマットする必要がないので簡単です(希望の方法で保存した場合)。 TIMEの値は、クエリからその値をフォーマットする必要がある場合は、まだ調整が必要です。 INTでも、提示したい値を選択する準備が必要です。

私は、プレゼンテーション層がプレゼンテーション層に最適であると主張します。それは私の助言になるでしょう。それが提示されるべきであるとして、あなたがまだ値を選択することを主張した場合、私はあなた秒の長さを持つINT列のためにそれを行うための方法をあげる:

DECLARE @total_seconds INT = 2460; 

SELECT 
    CASE WHEN (@total_seconds/(60*60))=0 
     THEN '' 
     ELSE (CASE WHEN (@total_seconds/(60*60))<10 THEN '0' ELSE '' END) + CAST(@total_seconds/(60*60) AS VARCHAR)+':' 
    END + 
    CASE WHEN ((@total_seconds % (60*60))/(60))=0 
     THEN '' 
     ELSE (CASE WHEN ((@total_seconds % (60*60))/(60))<10 THEN '0' ELSE '' END) + CAST((@total_seconds % (60*60))/(60) AS VARCHAR)+':' 
    END + 
    (CASE WHEN ((@total_seconds % (60*60)) % (60))<10 THEN '0' ELSE '' END) + CAST((@total_seconds % (60*60)) % (60) AS VARCHAR); 
+1

ありがとうございます。これは非常に役に立ちます。この情報を私に提供してくれた時を感謝します。 –

関連する問題