1)
サーバー
:
SQL Server
には、datetime
と
smalldatetime
という
2
つの日付/時刻のデータ型があります。datetime
データ型は
2
つの
4
バイトの整数
(8
バイト)
で保存されます。最初の
4
バイトは基本日付である
1900
年
1
月
1
日までの日数またはそれ以後の日数、残りの
4
バイトは午前
0
時
0
分
0
秒以降のミリ秒数を表します。datetime
の対応期間は
1753
年
1
月
1
日〜
9999
年
12
月
31
日です。精度は、300
分の
1
秒
(3.33
ミリ秒)
です。
smalldatetime
データ型は
datetime
よりも精度が低くなります。このデータ型は
4
バイトで保存されます。最初の
2
バイトの整数には
1900
年
1
月
1
日以後の日数、残りの
2
バイトの整数は午前
0
時
0
分
0
秒以降の分数が保存されます。smalldatetime
の範囲値は、1900
年
1
月
1
日〜
2079
年
6
月
6
日です。精度は、分単位です。
どちらのデータ型でも、2
桁の西暦表示で指定できますが、年号は
4
桁の場合と同じように保存されてしまいます。"2
桁の年数のカットオフ"
構成オプションでは、SQL Server 7.0
が
2
桁の年数を
4
桁に拡張する方法を定義します。オプションは
4
桁の西暦で指定し、デフォルトは
2049
です。ある年を西暦の下
2
桁で指定したときに、それが
2
桁の年数のカットオフ オプションで指定した西暦の下
2
桁の数字と同じかそれより小さい場合には、オプションで指定されている上
2
桁の西暦で日付が保存されます。指定した下
2
桁の数字が
2
桁の年数のカットオフ オプションの値よりも大きい場合には、オプションより前の西暦で日付が保存されます。たとえば、2
桁の年数のカットオフ オプションの値がデフォルトの
2049
の場合、下
2
桁が
49
の日付は
2049
年で保存され、50
は
1950
年で保存されます。また、2
桁の年数のカットオフ オプションの値が
2029
の場合には、下
2
桁が
29
の日付は、2029
年で保存され、30
は
1930
年で保存されます。SQL Server
の以前のバージョンには、設定可能な 西暦2000年問題サポート オプションはありません。2049
を使用して処理します。
2) SQL
管理ツール
:
SQL Server
管理ツールには、SQL Server Enterprise Manager、SQL Server
プロファイラ、SQL Server
クエリ アナライザ、SQL Server
サービス マネージャ、クライアント ネットワーク ユーティリティ、サーバー ネットワーク ユーティリティ、SQL Server
エージェント、さらに
25
以上のウィザードがあります。これらの一部では、日付情報の表示と入力を行うことができます。
日付の表示
:
SQL Server
エンジンの形式または
Microsoft Windows NT*
のコントロール パネルの設定を使用します。
日付の入力
:
日付の入力には、編集フィールドまたは日付コントロールが使用されます。サーバーに日付情報をトランスポートする手段としては、Transact-SQL、SQL Server
分散管理フレームワーク オブジェクト、SQL Server
の
OLE DB Provider、SQL Server ODBC
ドライバ、DB-Library、および
Net-Library
があります。入力された日付の有効性は、datetime
および
smalldatetime
データ型に対して、Microsoft Data Engine
のレベルで検証されます。ただし、SQL Server
のジョブおよび警告のスケジュール エンジンであるSQL Server
エージェント、は例外です。つまり、スケジュール ジョブの日付情報は整数のデータ型で保存されます。入力された日付の有効性は、ユーザー インターフェイスの日付コントロールで検証されます。また、データベースに保存する前に、ストアド プロシージャ内の
SQL Server ISDATE()
関数で検証されます。
3) SQL
データ管理オブジェクト
SQL
データ管理オブジェクトには日付を表すプロパティを持つものがあります。これらのプロパティは
long 型の整数で処理され、日付は
YYYYMMDD
形式の数値で表されます。たとえば、1998
年
4
月
19
日の日付は、19980419
という数値で表わされます。
4)
データ変換サービス
データ変換サービス
(DTS)
は、文字列の列
(DBTYPE_STR
または
DBTYPE_WSTR)
を日付の列
(DBTYPE_DATE)
にマップさせて変換します。変換元の列となる文字列の日付部分は、YYYY-MM-DD
の
OLE DB
形式でなければなりません。また、日付の列を文字列の列にマップさせて変換することもできます。この場合、日付部分は
YYYY-MM-DD
の
OLE DB
形式の文字列に変換されます。たとえば、1998
年
4
月
19
日の
OLE DB
形式は
1998-04-19
です。Microsoft ActiveX*
や
Microsoft Visual Basic*
などのスクリプトを使用した変換では、入力日付に
CDate()
関数を使用することもできます。
5)
アプリケーション プログラミング
汎用目的の
SQL Server
アプリケーションでは、Transact-SQL
言語を使用して
SQL Server
データベースのデータを処理します。Transact-SQL
言語はサーバー上で処理され、Transact-SQL
ステートメントの日付は上記の
1)
サーバーで指定された規則を使用して処理されます。SQL Server
アプリケーションでは、いくつかのアプリケーション プログラミング インターフェイス
(API)
の
1
つを使用して
Transact-SQL
ステートメントをサーバーに送信し、結果を処理します。日付は、SQL Server
に送信する
Transact-SQL
ステートメントの一部としても、API
を通して
Transact-SQL
のパラメータまたは式に渡されるプログラム変数にも指定できます。日付が
Transact-SQL
ステートメントの一部として指定されている場合は、1)
サーバー セクションで指定された規則を使用してサーバー上で処理されます。API
を通してパラメータおよび式に渡される変数に指定された日付は、次の
API
の規則に従います。
OLE DB (SQL Server
の
OLE DB Provider
を使用) :
日付は、OLE DB API
を使用して指定できます。
OLE DB Provider for SQL Server
では、これらの日付について
OLE DB
に適用されるのと同じ日付強制規則に従います。詳細については、MS Data Access
コンポーネント
(MDAC)
の西暦
2000
年問題対応ドキュメントを参照してください。Microsoft OLE DB Provider
も
OLE
オートメーション テクノロジーに適用される日付変換規則に従います。詳細については、OLE
オートメーション テクノロジーの西暦
2000
年問題対応ドキュメントを参照してください。
2
桁の年数変換の
OLE DB
カットオフ日付は
29
がデフォルト値です。29
以下の年数は
20xx
と解釈され、29
より大きい年数は
19xx
と解釈されます。カットオフ日付の構成方法については、OLE
オートメーション テクノロジーの西暦
2000
年問題対応ドキュメントを参照してください。SQL Server 7.0
が基準とするデフォルトのカットオフ日付は
49
で、これは
SQL Server
の以前のバージョンと互換性があります。以前のバージョンの
SQL Server
との互換性を考慮しない場合は、カットオフ日付に
29
を使用するように
SQL Server
を構成することができます。詳細については、SQL Server 7.0 Books Online
を参照してください。
ODBC (SQL Server ODBC Driver
を使用) :
ODBC API
では、2
桁の年数の指定をサポートしておらず、4
桁の年数の指定のみサポートされます。ODBC
では、アプリケーションが
ODBC
タイムスタンプ エスケープ シーケンスを使用して
SQL
ステートメントに日付を指定することを推奨しています
(タイムスタンプ エスケープ シーケンスは
4
桁の年数のみサポートしています)。ただし、SQL Server ODBC Driver
はユーザーが
Transact-SQL
日付を入力するのを禁止しません。Transact-SQL
日付が使用されている場合、その日付は
1)
サーバー セクションで指定されている規則を使用してサーバー上で処理されます。
DB-Library :
DB-Library
では、Transact-SQL
ステートメントの一部として日付を指定する以外の方法を提供していません。これらの日付は、1)
サーバー セクションで指定されている規則を使用してサーバー上で処理されます。