2017-11-21 390 views
1

私の時間をフォーマットするとき、私はhhまたはHHの使用に応じて異なる結果を得ます。SQLの日付書式設定でhhとHHの違いは何ですか?

これがなぜ起こるのか誰かが教えてもらえますか? 次のコードで問題が発生し、2番目の結果にNULLが返されます。

declare @TIMEPART time = getdate() 

declare @datetime datetime2(7) = getdate() 

select format(@timepart, 'hh\:mm'), format(@timepart, 'HH\:mm'), format(@datetime, 'hh\:mm'), format(@datetime, 'HH\:mm') 
+3

を戻しますミリメートル時間しかし

format(@timepart, 'hh:mm') 

format(@timepart, 'hh\:mm') 

はHHが返され – apomene

答えて

0

HH:MM形式は、時間データ型の有効な変換ではなく、形式(時間、時間形式)機能のためには、正しい構文ではありません。このため、format関数はnullを返します。 HH:mmは日時データ型の24時間クロックの変換タイプですが、時刻データ型はすでに24時間形式であるため、時刻データ型と互換性がありません(なぜこれが当てはまるのかわかりませんが、データ型は、単に24時間の時刻を表すだけではありません)。 AM \ PM形式のhh:mm型はdatetime型のデータ型でのみ有効で、時間的には24時間しか返されませんが、これは常にデータ型が返すことができるためです。以下に示すようにAM/PM形式を表示するために、入力値のデータ型が時間の場合は、時刻をdatetimeに変換する必要があります。

declare @TIMEPART time = '21:20:20.0570000' 

    declare @datetime datetime2(7) = '21:20:20.0570000' 



    select format(@timepart, 'hh\:mm'), format(convert(datetime,@timepart), 'hh:mm'), format(@datetime, 'hh\:mm'), format(@datetime, 'HH\:mm') 

あなたはまだ第二のカラムのデータ型は時間になりたいなら、あなたは戻って時間

cast(format(convert(datetime,@timepart), 'hh:mm') as time) 

に変換する必要がありますただし、この例では時間が9:20になると時刻は時刻の0〜23の値として保存されるため、午後9時20分ではありません。これは、常に0〜23時間の形式で任意の時間値を返そうとするのがよい理由の良い例です。時間を12時間形式で表示する必要がある場合は、それをvarcharに変換するほうがよいでしょう。注意すべき

convert(varchar(15), format(convert(datetime,@timepart), 'hh:mm')) 

もうひとつは例

format(@datetime, 'hh\:mm') 

format(@datetime, 'hh:mm') 

ため、日付時刻のフォーマットで\が必要とされていないということである同じ値を返します。ただし、\は時間データ型関数に必要です。 hhは12時間形式であるのに対し、これも、HHは24時間形式のためのものであるSQLに想定C#ではヌル

関連する問題