2017-01-05 4 views
1

TIMEデータ型を作成すると、SQL Serverの既定値はtime(7)です。 MSDNは、精度と位取りが(8、0)から(16,7)の範囲であることを示しています。Sql ServerのTimeデータ型で精度と位取りはどうなりますか?

時間(00-23)、分(00-59)、秒(00-59)はそれぞれ最大2桁ですので、その精度はすべて6以上にすることはできません。式にミリ秒(000-999)を追加すると、精度は9まで上がることがあります。小数点はないので、scaleは常にゼロにする必要があります。

次に、(8、0)または(16,7)のような値は、精度に意味があります(精度では時間、分、秒の間にコロンセパレータがカウントされます)。精度はちょうど9(つまり、コロンを数えれば12)でなければならず、常にゼロになるべきですか?どのように利用可能な(0から7)値から時間のデータ型の精度を選ぶ?

答えて

3

time(およびdatetime2)では、精度をスケールによって推論される。ユーザーはスケール(2番目の端数の桁数)のみを選択できるので、精度が与えられます。これは秒の小数部分のみを制御します。 (0)はフル秒のみ、(3)はミリ秒の解像度を提供します。(7)解像度は100nsです。

精度は、指定されたスケールでの(推測された)文字数です(コロンと小数点の秒数を含む)。したがって、(0)では、hh:mm:ss(8文字)などの文字列表現になり、(3)hh:mm:ss.fff(12文字)、(7)hh:mm:ss.fffffff(16文字)になります。これはリンク先のMSDNページの表に記載されている番号に対応しています。

1

を実行し、この:

DECLARE @timeval AS TIME(7) = '12:34:56.1234567'; 

SELECT @timeval Value16_7Precision, 
     LEFT(CAST(@timeval AS NVARCHAR(20)), 16) First16 , 
     LEFT(CAST(@timeval AS NVARCHAR(20)), 9) First9 , 
     RIGHT(CAST(@timeval AS NVARCHAR(20)), 7) Last7; 

は、これを取得するには、次の

Value16_7Precision First16    First9  Last7 
12:34:56.1234567 12:34:56.1234567 12:34:56. 1234567 

TIME(0) = (8,0)について、最初の8つの文字が考慮されています12:34:56

関連する問題