time (Transact-SQL)

1 日の時刻を定義します。時刻は 24 時間形式でタイム ゾーンは認識されません。

Transact-SQL の日付と時刻のデータ型および関数の概要については、「日付と時刻の関数 (Transact-SQL)」を参照してください。日付と時刻のデータ型および関数の一般的な例については、「日時データの使用」を参照してください。

time の説明

プロパティ

構文

time [ (fractional second precision) ]

使用法

DECLARE @MyTime time(7)

CREATE TABLE Table1 ( Column1 time(7) )

fractional seconds precision

秒の小数点以下の有効桁数を指定します。

0 ~ 7 の整数を指定できます。

既定の有効桁数は 7 (100ns) です。

使用法

DECLARE @MyTime time(7)

CREATE TABLE Table1 ( Column1 time(7) )

既定の文字列リテラル形式

(下位のクライアントに使用)

hh:mm:ss[.nnnnnnn]

詳細については、「日時データの使用」の「下位クライアントの下位互換性」セクションを参照してください。

範囲

00:00:00.0000000 ~ 23:59:59.9999999

要素範囲

hh は、0 ~ 23 の時を表す 2 桁の数字です。

mm は、0 ~ 59 の分を表す 2 桁の数字です。

ss は、0 ~ 59 の秒を表す 2 桁の数字です。

n* は、秒の有効桁数を表す 0 ~ 7 桁の数字です (0 ~ 9999999)。

文字長

8 文字 (hh:mm:ss) 以上、16 文字 (hh:mm:ss.nnnnnnn) 以下

有効桁数、小数点以下桁数

(ユーザーは小数点以下桁数のみ指定)

指定した小数点以下桁数結果 (有効桁数、小数点以下桁数)列長 (バイト単位)1 秒未満の 秒の 有効桁数
time (16,7)57
time(0) (8,0)30-2
time(1) (10,1)30-2
time(2) (11,2)30-2
time(3) (12,3)43-4
time(4) (13,4)43-4
time(5) (14,5)55-7
time(6) (15,6)55-7
time(7) (16,7)55-7

ストレージのサイズ

既定では 5 バイト固定 (秒部分の既定の有効桁数は 100ns) です。

精度

100 ナノ秒

既定値

00:00:00

この値は、date から datetime2 または datetimeoffset への暗黙的な変換で、付加的な時刻要素として使用されます。

ユーザー定義の 1 秒未満の秒の有効桁数

あり

タイム ゾーン オフセットへの対応と保持

なし

夏時間への対応

なし

time でサポートされる文字列リテラル形式

次の表は、time データ型に使用できる有効な文字列リテラル形式を示しています。

SQL Server

説明

hh:mm[:ss][:fractional seconds][AM][PM]

hh:mm[:ss][.fractional seconds][AM][PM]

hhAM[PM]

hh AM[PM]

AM を指定したかどうかに関係なく、時刻値 0 は午前 0 時を表します。時刻値が 0 のときに PM を指定することはできません。

AM と PM のどちらも指定していない場合、01 から 11 までの時刻値は午前の時刻を表します。これらの値は、AM を指定した場合も午前の時刻を表します。PM を指定すると、午後の時刻を表します。

AM と PM のどちらも指定していない場合、時刻値 12 は正午を表します。AM を指定すると、午前 0 時を表します。PM を指定すると、正午を表します。たとえば、12:01 という値は、12:01 PM では正午を 1 分過ぎた時刻、12:01 AM では午前 0 時を 1 分過ぎた時刻を表します。12:01 AM と指定しても、00:01 または 00:01 AM と指定した場合と同じ時刻を表します。

13 から 23 までの時刻値は、AM または PM を指定していなくても、午後の時刻を表します。また、PM を指定した場合も午後の時刻を表します。時刻値が 13 から 23 までの場合、AM を指定することはできません。

24 という時刻値は無効です。午前 0 時を表すには、12:00 AM または 00:00 とします。

ミリ秒の前には、コロン (:) またはピリオド (.) を付けます。コロンを付けると、後続の値は、1000 分の 1 秒単位になります。ピリオドを付けると、数字が 1 桁なら 10 分の 1 秒単位に、2 桁なら 100 分の 1 秒単位に、3 桁なら 1000 分の 1 秒単位になります。たとえば、"12:30:20:1" は 12 時 30 分 20 秒を 1000 分の 1 秒過ぎた時刻を表し、"12:30:20.1" は 12 時 30 分 20 秒を 10 分の 1 秒過ぎた時刻を表します。

ISO 8601

hh:mm:ss

hh:mm[:ss][.fractional seconds]

  • hh は、タイム ゾーン オフセットの時間数を表す 0 ~ 14 の 2 桁の数字です。

  • mm は、タイム ゾーン オフセットの付加的な分数を表す 0 ~ 59 の 2 桁の数字です。

ODBC

{t 'hh:mm:ss[.fractional seconds]'}

ODBC API 固有です。

SQL Server 2008 でも SQL Server 2005 と同様に機能します。

time の ANSI および ISO 8601 への準拠

ISO 8601 (5.3.2 および 5.3) では、午前 0 時を表す時刻値 24 や、59 を超えるうるう秒の使用が定義されていますが、こうした用法は、下位互換性および既存の日付時刻型との一貫性を保つためサポート対象外となります。これらは、SQL 2003 標準では定義されていません。

下位クライアントに使用される既定の文字列リテラル形式は、hh:mm:ss[.nnnnnnn] として定義されている SQL 標準形式に準拠しています。この形式は、1 秒未満の秒を除き、TIME に対する ISO 8601 の定義と似ています。

A. 日付および時刻データ型の比較

次の例では、文字列をそれぞれの date および time データ型にキャストした結果を比較します。

SELECT 
     CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time' 
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date' 
    ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS 
        'smalldatetime' 
    ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime' 
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS 
        'datetime2'
    ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS 
        'datetimeoffset';

データ型

出力

time

12:35:29. 1234567

date

2007-05-08

smalldatetime

2007-05-08 12:35:00

datetime

2007-05-08 12:35:29.123

datetime2

2007-05-08 12:35:29. 1234567

datetimeoffset

2007-05-08 12:35:29.1234567 +12:15

B. 有効な時刻文字列リテラルを time(7) 列に挿入する

次の表は、time(7) 型の列に挿入可能な各種の文字列リテラルと、その列に格納される値を示しています。

各種の文字列リテラル形式

挿入する文字列リテラル

格納される time(7) 値

説明

SQL Server

'01:01:01:123AM'

01:01:01.1230000

1 秒未満の秒の有効桁数の前にコロン (:) を付けた場合、小数点以下桁数が 3 桁を超えると、エラーが生成されます。

SQL Server

'01:01:01.1234567 AM'

01:01:01.1234567

AM または PM を指定した場合、時刻は 24 時間形式で格納され、リテラルの AM または PM は格納されません。

SQL Server

'01:01:01.1234567 PM'

13:01:01.1234567

AM または PM を指定した場合、時刻は 24 時間形式で格納され、リテラルの AM または PM は格納されません。

SQL Server

'01:01:01.1234567PM'

13:01:01.1234567

AM または PM の前の空白は省略できます。

SQL Server

'01AM'

01:00:00.0000000

時だけを指定した場合、他のすべての値は 0 になります。

SQL Server

'01 AM'

01:00:00.0000000

AM または PM の前の空白は省略できます。

SQL Server

'01:01:01'

01:01:01.0000000

1 秒未満の秒の有効桁数を指定しなかった場合、データ型で定義されている各桁が 0 になります。

ISO 8601

'01:01:01.1234567'

01:01:01.1234567

ISO 8601 に準拠するには、AM または PM を付けずに、24 時間形式を使用します。

ISO 8601

'01:01:01.1234567 +01:01'

01:01:01.1234567

TZD (Time Zone Difference) は省略可能で、入力はできますが保存されません。

C. date 型と time 型のそれぞれの列に対して時間の文字列リテラルを挿入する

次の表の 1 列目は、2 列目に示した date 型または time 型のデータベース テーブル列に挿入する時間の文字列リテラルを示しています。3 列目は、データベース テーブル列に格納される値を示しています。

挿入する文字列リテラル

列のデータ型

列に格納される値

説明

'12:12:12.1234567'

time(7)

12:12:12.1234567

1 秒未満の秒の有効桁数が、列に指定された値を超えた場合、エラーは生成せずに文字列が切り詰められます。

'2007-05-07'

date

NULL

time 値により、INSERT ステートメントが失敗します。

'12:12:12'

smalldatetime

1900-01-01 12:12:00

1 秒未満の秒の有効桁数の値によって、INSERT ステートメントが失敗します。

'12:12:12.123'

datetime

1900-01-01 12:12:12.123

秒の有効桁数が 3 桁を超えると、INSERT ステートメントが失敗します。

'12:12:12.1234567'

datetime2(7)

1900-01-01 12:12:12.1234567

1 秒未満の秒の有効桁数が、列に指定された値を超えた場合、エラーは生成せずに文字列が切り詰められます。

'12:12:12.1234567'

datetimeoffset(7)

1900-01-01 12:12:12.1234567 +00:00

1 秒未満の秒の有効桁数が、列に指定された値を超えた場合、エラーは生成せずに文字列が切り詰められます。