OpenESQL 日付時刻データ型の処理

OpenESQL は、デフォルトで DBMS 内の datetime 列に関連付けられたすべての入力および出力文字ホスト変数に対して ODBC/ISO 8601 形式をサポートします。

例えば、SQL Server DBMS を使用する場合、文字ホスト変数のデフォルトのデータ型形式は、次のとおりです。

SQL Server データ型 ODBC/ISO 8601 形式
date yyyy-mm-dd
time hh:mm:ss
datetime2 yyyy-mm-dd hh:mm:ss.ffffffff

SQL Server に加えて、これらの形式は ISO8601 形式を受け入れる他の DBMS ベンダーにも一般的に適用されます。OpenESQL は入力および出力文字ホスト変数の両方に関して、代替形式をサポートしています。デフォルトを上書きする代替形式を指定できるようにする SQL コンパイラ指令のオプションをいくつか提供します。

入力ホスト変数 - DETECTDATE

DETECTDATE SQL コンパイラ オプション指令は、PIC X 文字入力ホスト変数の内容を確認するように OpenESQL に指示し、デフォルトの ISO8601 形式に一致するデータを検索します。1 つ以上の追加指令を指定することで、デフォルトの形式を上書きできます。

注: 各指令の詳細については、「SQL コンパイラ指令オプション」の対応するトピックを参照してください。
DATE
代替の DATE 形式を指定します。
DATEDELIM
date 列のための代替の区切り文字を指定します。
  • 代替の区切り文字は、DATE と使用すると、指定された代替日付形式に適用されます。
  • 代替の区切り文字は、DATE と使用しないと、ISO 8601 日付形式に適用されます。
TIME
代替の TIME 形式を指定します。
TIMEDELIM
time 列のための代替の区切り文字を指定します。
  • 代替の区切り文字は、TIME と使用すると、指定された代替時刻形式に適用されます。
  • 代替の区切り文字は、TIME と使用しないと、ISO 8601 時刻形式に適用されます。
TSTAMPSEP
入力ホスト変数の日付部分と時刻部分の間で使用される 1 文字の区切り文字を指定します。

ダッシュ文字は、ダッシュ、スペース、T などの特定の区切り文字セットを探すように OpenESQL に指示します。たとえば、日付または時刻の代替フォーマットを指定せず、TSTAMPSEP をダッシュ文字 (-) に設定すると、OpenESQL は入力ホスト変数で次のフォーマットを認識します。

  • yyyy-mm-dd-hh.mm.ss.ffffff
  • yyyy-mm-dd hh.mm.ss.ffffff
  • yyyy-mm-dd hh:mm:ss.ffffff
  • yyyy-mm-ddThh.mm.ss.ffffff
  • yyyy-mm-ddThh:mm:ss.ffffff

他のすべての文字は、各日付および時刻フォーマットの間でその特定の文字を探すように OpenESQL に指示します。その場合、日付部はダッシュ文字 (-) で区切られ、時刻部はコロン (:) で区切られます。

TSTAMPSEP を指定しないと、OpenESQL はデフォルトで日付と時刻形式の間でその特定の文字を探します。その場合、日付部はダッシュ文字 (-) で区切られ、時刻部はコロン (:) で区切られます。

DETECTDATE の使用に関するガイドライン
DETECTDATE 指令を使用すると、処理上の大幅なオーバーヘッドが生まれる可能性があります。これを最小限にするために、以下の使用シナリオで提示したガイドラインに従うことをお奨めします。
シナリオ DETECTDATE オプション
アプリケーションが PIC X 入力ホスト変数に date、time、および datetime の値を使用しますが、サポートされている ODBC/ ISO8601 形式に満足しており、代替形式は使用しません。 必要なし。1
アプリケーションが PIC X 入力ホスト変数で date、time、および datetime の値を使用しますが、それらの値はデータベース内の date、time、または datetime 列でのみ使用します。 CLIENT
アプリケーションが PIC X 入力ホスト変数で date、time、および datetime の値に ODBC エスケープ シーケンスを使用しますが、それらの値はデータベース内の date、time、または datetime 列でのみ使用します。 CLIENT
アプリケーションが PIC X 入力ホスト変数で date、time、および datetime の値を使用しますが、それらの値はデータベース内の character 列でのみ使用します。また、SQL は、date、time、または datetime2 データ型に対して、暗黙的な文字または明示的な文字のいずれも使用しません。 必要なし。DETECTDATE、DATE、または TIME SQL コンパイラ指令オプションを使用しません。
date、time、および datetime 列で使用するのは SQLTYPE ホスト変数のみで、PIC X ホスト変数を date、time、または datetime 列で使用することはありません。 必要なし。2
アプリケーションが PIC X 入力ホスト変数で date、time 、および datetime の値を使用します。さらに、データベースの character 列と date、time、および datetime 列の両方でそれらの値を使用し、character 列は、date、time 、または datetime 値と混同される可能性のある形式のデータを使用する場合があります。 SERVER
1Oracle で TIME 値も使用する場合は、DETECTDATE を使用することをお奨めします。

2オプションで、代替の日付時刻の SQL コンパイラ指令オプションを使用できます。

注:
  • Enterprise Developer バージョン 2.2 Update 2 以前を使用して開発した SQL Server アプリケーションにおいて、PIC X ホスト変数を SQL Server データベースの datetime 列で使用する場合は、DETECTDATE 指令を指定することをお奨めします。
  • すべての DETECTDATE オプションの詳細については、DETECTDATE SQL コンパイラ指令オプションのトピックを参照してください。

出力ホスト変数

OpenESQL は、デフォルトでは date、time、および datetime のデータ型を ISO8601 のデフォルト形式で返します。次のように、追加の OpenESQL 指令を指定することでデフォルトの形式を上書きできます。

DBMS データ型 ODBC/ISO 8601 形式 OpenESQL 指令
date yyyy-mm-dd DATE、DATEDELIM
time hh:mm:ss TIME、TIMEDELIM
datetime yyyy-mm-dd hh:mm:ss.ffffff TSTAMPSEP