日付/時刻拡張データ型の使用
適用先
日付/時刻拡張データ型は日付と時刻の情報を格納し、日付/時刻データ型に似ていますが、日付範囲が広く、小数点以下の精度が高く、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 プロパティを "短い日付" に設定すると、目的の結果が得られます。