日付/時刻拡張データ型は日付と時刻の情報を格納し、日付/時刻データ型に似ていますが、日付範囲が広く、小数点以下の精度が高く、SQL Server の datetime2 日付型と互換性があります。 Access データを SQL Server にインポートまたはリンクすると、Access の日付/時刻拡張型フィールドを SQL Server の datetime2 列に一貫してマッピングできます。 詳細については、「datetime2 (Transact-SQL)」を参照してください。
警告 Access で式を作成し、日付/時刻拡張データ型に基づいて日付/時刻関数を使用すると、計算の精度が失われるか、結果に他の問題が発生する可能性があります。 Microsoft はこの問題を認識しており、今後のリリースでは、式と関数をより適切にサポートする予定です。 回避策として、パススルー クエリを作成して、同等の SQL Server 式と日付/時刻関数を使用できます。 詳細については、「Access SQL と SQL Server TSQL の比較」を参照してください。
この記事の内容
日付/時刻データ型と日付/時刻拡張データ型を比較する
次の表は、2 つのデータ型の重要な違いをまとめたものです。
属性 |
日付/時刻型 |
日付/時刻拡張型 |
---|---|---|
最小値 |
100-01-01 00:00:00 |
0001-01-01 00:00:00 |
最大値 |
9999-12-31 23:59:59.999 |
9999-12-31 23:59:59.9999999 |
精度 |
0.001 秒 |
1 ナノ秒 |
サイズ |
倍精度浮動小数点 |
42 バイトのエンコードされた文字列 |
日付/時刻拡張データ型の使用
以下の情報は、使用に関する重要な考慮事項について説明しています。
[テーブル デザイン] ビュー より大きなデータ範囲とより高い精度を利用するために、Access テーブルにフィールドを追加できます。 [テーブル デザイン] ビューで、日付/時刻データ型を日付/時刻拡張データ型に変換することもできます。 このデータ型を主キー フィールドとして使用することもできます。 詳細については、「テーブルを作成してフィードを追加する」を参照してください。
日付と時刻を入力する 日付と時刻の値の入力は、小数ナノ秒も入力できることを除いて、日付/時刻データ型と同様です。 次に例を示します。
-
入力形式: mm/dd/yyyy hh:mm:ss.nnnnnnn
-
例:06/15/1215 09:25:3.234
7 桁を超える小数ナノ秒がある場合、それらは 7 桁に丸められます。 小数ナノ秒の表示を制御するには、テーブルを開き、リボンで [フィールド] を選択し、[書式設定] グループで、[小数点を増やす] または [小数点を減らす] を選択します。
書式設定 日付/時刻データ型と日付/時刻拡張データ型はどちらも、一般的な形式の日付、日付 (長い形式)、ある程度長い形式の日付、日付 (短い形式)、時刻 (長い形式)、ある程度長い形式の時間、時刻 (短い形式) の同様の標準書式設定文字列を使用し、いずれもカスタム書式設定をサポートします。 日付/時刻拡張データ型の場合、時間ベースの標準形式は、ナノ秒の小数精度もサポートします。 日付/時刻拡張データ型の書式設定は、デフォルトで一般的な形式の日付と時刻 (長い形式)の書式設定になり、Windows の地域設定で指定されるオプションに従います。 小数点以下の桁数プロパティを使用して、小数点の右側の桁数 (1 ~ 7) を指定することにより、小数精度の書式設定を制御することもできます。
リンクとインポート SQL Server の datetime2 データ型など、対応するデータ型を使ってデータベースにリンクしたり、データベースからインポートしたりすることもできます。 SQL Server バージョン 2014 以降のデータベースがサポートされています。 日付/時刻拡張データ型では、Microsoft ODBC Driver for SQL Server 11 以降を使用する必要があります。 Microsoft ODBC Driver 13.1 for SQL Server の使用をお勧めします。 OLE DB の使用もサポートされています。 詳細については、「ODBC の日付および時刻の改善のためのデータ型サポート」および「拡張された日付と時刻の機能 (OLE DB) の使用」を参照してください。
フォームとレポート 日付/時刻拡張データ型をフォームまたはレポートに追加できます。 フォームでは、日付ピッカーと定型入力を使用して、より広い範囲の日付を入力できますが、ナノ秒の小数部精度は入力できません。
式のサポート 日付/時刻拡張データ型は、SQL 集計関数と式の評価をサポートします。 たとえば、LoggedDateTime を日付/時刻拡張データ型のフィールドとして使用します。
タスク |
使用例 |
結果 |
---|---|---|
最小値の検索 |
Min(LoggedDateTime) |
範囲内で最も早い日付と時刻 |
月を抽出する |
Month(LoggedDateTime) |
月の名前 (例: 1 月) |
1 日を加える |
[LoggedDateTime]+1 |
火曜日は水曜日になります |
下位互換性に関する考慮事項
日付/時刻拡張データ型は、以前のバージョンの Microsoft Access と互換性がありません。 型がローカル Access テーブル内で使用されている場合、この機能を含まない Access のバージョンはデータベースを開くことができません。
[現在のデータベース アクセス] オプション [リンクされたテーブル/lmported テーブルの日付/時刻拡張データ型をサポートする] オプションを使用して、操作をリンクおよびインポートするための日付/時刻拡張データ型を有効または無効にすることができます。 詳細については、「カレント データベースのユーザー オプションを設定する」を参照してください。
VBA で文字列として日付/時刻拡張データ型を使用する
次の VBA の例では、DAO メソッドを使用して、次の表に基づいて日時の拡張データ型を表示、入力、評価します。
ID |
DTEData |
DTData |
1 |
1/1/2 1:01:03.1234567 AM |
1/1/2001 |
テーブル名: DTETable
ID データ型: オートナンバー DTEData データ型: 日付/時刻拡張型 DTData データ型: 日付/時刻型例:日付と時刻を表示する
次の例では、日付と時刻を表示します。 使用される形式は、24時間制の mm/dd/yyyy hh: mm: ss です。 書式設定はカスタマイズできません。
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("DTETable")
Do Until rs.EOF
Debug.Print rs!DTETable
rs.MoveNext
Loop
結果 Access は次のように表示します。01/01/0002 01:01:03.1234567。
例:日付と時刻を入力する
次の例では、文字列形式を使用して日付と時刻を入力します。 すべての標準の日付と時刻の形式がサポートされています。
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("DTETable")
With CurrentDb.OpenRecordset("DTETable")
.AddNew
![DTEData] = "1/1/9999 1:1:1.0123 AM"
![DTData] = #1/1/2001#
.Update
End With
結果 Access は新しい行 (ID = 2) を追加します、
ID |
DTEData |
DTData |
1 |
1/1/2 1:01:03.1234567 AM |
1/1/2001 |
2 |
1/1/9999 1:01:01.0123000 AM |
1/1/2001 |
例:クエリ式を評価する
次の例では、Day 関数を使用して、日付および時刻フィールドから日数を抽出します。
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT Day(DTEData) as day FROM DTETable")
Do Until rs.EOF
Debug.Print "The day of the month is: "&rs!day
rs.MoveNext
Loop
結果 Access は次のように表示します。
月の日は次のとおりです。1
月の日は次のとおりです。1