日付/時刻拡張データ型の使用

適用先
Access for Microsoft 365 Access 2024 Access 2021

日付/時刻拡張データ型は日付と時刻の情報を格納し、日付/時刻データ型に似ていますが、日付範囲が広く、小数点以下の精度が高く、SQL Server の datetime2 日付型と互換性があります。 Access データを SQL Server にインポートまたはリンクすると、Access の日付/時刻拡張型フィールドを SQL Server の datetime2 列に一貫してマッピングできます。 詳細については、「 datetime2 (Transact-SQL)」を参照してください。

日付/時刻拡張範囲 の警告 Access で日付/時刻拡張データ型に基づいて式を作成し、日付/時刻関数を使用すると、計算の精度が失われるか、結果に関するその他の問題が発生する可能性があります。 Microsoft はこの問題を認識しており、今後のリリースでは、式と関数をより適切にサポートする予定です。 回避策として、パススルー クエリを作成して、同等の SQL Server 式と日付/時刻関数を使用できます。 詳細については、「Access SQL と SQL Server TSQL の比較」を参照してください。

この記事の内容

日付/時刻データ型と日付/時刻拡張データ型を比較する 日付/時刻拡張データ型の使用 下位互換性に関する考慮事項 VBA で文字列として日付/時刻拡張データ型を使用する

日付/時刻データ型と日付/時刻拡張データ型を比較する

次の表は、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 テーブルにフィールドを追加します。 [テーブル デザイン] ビューで、日付/時刻データ型を日付/時刻拡張データ型に変換することもできます。 このデータ型を主キー フィールドとして使用することもできます。 詳細については、「テーブルを作成してフィードを追加する」を参照してください。

日付と時刻の入力 日付と時刻の値の入力は Date/Time データ型に似ていますが、ナノ秒の小数部も入力できる点が異なります。 次に例を示します。

  • 入力形式: 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 以降を使用する必要があります。 SQL Serverには Microsoft ODBC Driver 13.1 を使用することをお勧めします。 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

結果 アクセス表示: 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

結果 アクセスが表示されます。

月の日は 1 です。
月の日は 1 です。

クエリ式で Date/Time Extended を使用する関数

次の関数は、クエリ式で Date/Time Extended で動作します。
​​​​​​​
年、月、平日、日、時間、分、秒、DateAdd、DateDiff、DatePart。

さらに、引数の型を使用して計算で日付/時刻の拡張値を生成する必要があると判断できない拡張バージョンの関数もあります。 それらを以下に示します。

DateValueExtended、TimeValueExtended、DateSerialExtended、TimeSerialExtended、NowExtended、DateExtended、DateTimeExtended、TimeExtended。

これらの関数は、最後に "Extended" がない関数と同じように機能しますが、日付/時刻値ではなく、Date/Time Extended 値を返します。

VBA は変更されておらず、新しい関数は VBA コードでは認識されず、既存の関数は日付/時刻拡張値では機能しないことに注意してください。

使用例

元のクエリ:


Select DateValue([OrderDate]) AS OrderDateOnly_DateValue

, Format([OrderDate],"Short Date") AS OrderDateOnly_Format

From tblOrders

次に、DateValue([OrderDate]) を DateValueExtended([OrderDate]) に変更します。これにより、最初の式が修正されます。

Access では、日付/時刻拡張列の Format 関数は処理されないことに注意してください。列の Format プロパティを設定するだけです。

したがって、次を使用する場合は、次の手順を実行します。


SELECT DateValueExtended([OrderDate]) AS OrderDateOnly_DateValue, Table1.OrderDate

FROM Table1;

2 番目の列の Format プロパティを "短い日付" に設定すると、目的の結果が得られます。

ページの先頭へ

関連項目

データ型とフィールド プロパティの概要

日付と時刻のフィールドを書式設定する

日付と時刻のフィールドを作成または削除する