日付/時刻拡張データ型は日付と時刻の情報を格納し、日付/時刻データ型に似ていますが、日付範囲が広く、小数点以下の精度が高く、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 のテーブルにフィールドを追加すると、より大きなデータ範囲と高精度を利用できます。 [テーブル デザイン] ビューで、日付/時刻データ型を日付/時刻拡張データ型に変換することもできます。 このデータ型を主キー フィールドとして使用することもできます。 詳細については、「テーブルを作成してフィードを追加する」を参照してください。
日付と時刻を入力する 日付と時刻の値の入力は、日付/時刻データ型に似ていますが、ナノ秒小数部も入力できる点が異なります。 次に例を示します。
- 入力形式: mm/dd/yyyy hh:mm:ss.nnnnnnn
- 例:06/15/1215 09:25:3.234
7 桁を超える小数ナノ秒がある場合、それらは 7 桁に丸められます。 小数ナノ秒の表示を制御するには、テーブルを開き、リボンで [フィールド] を選択し、[書式設定] グループで [小数点以下の増減]
または [小数点以下の減らし] を選択します
。
書式設定 日付/時刻と日付/時刻の拡張データ型はどちらも、 General Date、 Long Date、 Medium Date、 Short Date、 Long Time、 Medium Time、および Short Time の同様の標準書式設定文字列を使用し、どちらもカスタム書式設定をサポートしています。 日付/時刻拡張データ型の場合、時間ベースの標準形式は、ナノ秒の小数精度もサポートします。 日付/時刻拡張データ型の書式設定は、デフォルトで一般的な形式の日付と時刻 (長い形式)の書式設定になり、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 では、データベースを開くことができません。
リンクおよびインポート操作の日付/時刻拡張データ型は、「 現在のデータベース ・アクセス」オプション「 リンク/移植テーブルの日付/時刻拡張データ型をサポート」を使用して有効または無効にすることができます。 詳細については、「カレント データベースのユーザー オプションを設定する」を参照してください。
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 displays 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
結果 新しい行 (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
クエリ式で日付/時刻の拡張を処理する関数
次の関数は、クエリ式の日付/時刻拡張で動作します。
Year、Month、Weekday、Day、Hour、Minute、Second、DateAdd、DateDiff、および DatePart です。
また、引数の型を使用して計算で日付/時刻の拡張値を生成する必要があることを決定できない一部の関数の拡張バージョンがあります。 それらを以下に示します。
DateValueExtended、TimeValueExtended、DateSerialExtended、TimeSerialExtended、NowExtended、DateExtended、DateTimeExtended、および TimeExtended。
これらの関数は末尾に "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列目の 書式 プロパティを「短い日付」に設定すると、必要な結果が得られます。