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

ほとんどのメインフレーム DB2 アプリケーションが DB2 DATE、TIME、および TIMESTAMP PIC X 文字ホスト変数のデフォルト形式を使用しますが、一部は使用しません。メインフレーム DB2 アプリケーションは、デフォルトに加えて代替形式もサポートします。同様に、ほとんどの SQL Server アプリケーションは、PIC X 文字ホスト変数のデフォルトの date、time、および datetime2 形式を使用します。残念ながら、デフォルトの DB2 のデータ型形式は、デフォルトの SQL Server のデータ型形式と一致しません。メインフレーム DB2 DATE、TIME、および TIMESTAMP の形式が正しく変換され、SQL Server のアプリケーションによって認識されることを確認するには、HCOSS を使用して変換をカスタマイズします。

たとえば、文字ホスト変数のデフォルトのデータ型形式は、次のとおりです。

メインフレーム データ型 メインフレーム DB2 形式 SQL Server データ型 SQL Server 形式
DATE yyyy-mm-dd date yyyy-mm-dd
TIME hh.mm.ss time hh:mm:ss
TIMESTAMP yyyy-mm-dd-hh.mm.ss.ffffff datetime2 yyyy-mm-dd hh:mm:ss.ffffffff

メインフレーム DB2 用の DATE データ型の文字ホスト変数のデフォルト形式と SQL Server 用の date データ型は一致します。したがって、SQL Server は DB2 のフォーマットを認識するので、変換は必要ありません。ただし、TIME/time および TIMESTAMP/datetime2 のデフォルトのデータ型形式は一致しません。そのため、アプリケーションが文字ホスト変数にデフォルトの DB2 TIME 形式または TIMESTAMP 形式 (あるいはその両方) を使用し、それらを SQL Server のそれぞれ time および datetime2 データ型に使用する場合は、それらが認識されるように HCOSS を使用してメインフレーム DB2 の形式に変換します。

入力ホスト変数 - DETECTDATE

変換されている DB2 アプリケーションがデフォルトでは SQL Server でサポートされていない入力ホスト変数形式を使用する場合、DETECTDATE HCOSS コンパイラ指令オプションを使用して、DB2 形式を SQL Server 互換形式に変換します。DETECTDATE は、HCOSS に SQL Server の文字入力ホスト変数の内容を調べるように指示し、DATE、TIME、および TIMESTAMP データ用に指定されたメインフレーム形式に一致するデータを探します。

DATE および TIME データ型

日付と時間の変換に対処するために DETECTDATE 指令のみを使用して処理された DATE および TIME データ型に関しては、HCOSS は SQL Server 文字入力ホスト変数の内容を調査し、デフォルトの DATE および TIME DB2 メインフレーム形式 (それぞれ yyyy-mm-ddhh.mm.ss) に基づいて一致するフィールドを識別します。

DETECTDATE に加えて、DATE または TIME HCOSS 指令 (あるいはその両方) を指定する場合、HCOSS は SQL Server 文字入力ホスト変数の内容を調査し、DATE および TIME 指令によって指定された日付の時間の形式に一致するフィールドを識別します。

TIMESTAMP データ型
TIMESTAMP データ型に関しては、DETECTDATE が入力ホスト変数を調べるように HCOSS に指示し、次のいずれかの DB2 TIMESTAMP 形式との一致を探します。
  • 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

一致が見つかると、HCOSS は入力ホスト変数形式のデータを SQL Server が理解する形式に変換します。

DETECTDATE の使用に関するガイドライン
DETECTDATE 指令を使用すると、処理上の大幅なオーバーヘッドが生まれる可能性があります。これを最小限にするために、以下の使用シナリオで提示したガイドラインに従うことをお勧めします。
シナリオ DETECTDATE オプション
DB2 プリケーションが PIC X 入力ホスト変数で DATE、TIME、および TIMESTAMP の値を使用しますが、それらの値は SQL Server 内の date、time、または datetime2 列でのみ使用します。 CLIENT
DB2 アプリケーションが PIC X 入力ホスト変数で DATE、TIME、および TIMESTAMP の値を使用しますが、それらの値は SQL Server 内の character 列でのみ使用します。また、SQL は、date、time、または datetime2 データ型に対して、暗黙的な文字または明示的な文字のいずれも使用しません。 必要なし。DETECTDATE、DATE、または TIME HCOSS SQL コンパイラ指令オプションを使用しません。
SQL Server で使用するのは、date、time、および datetime2 列での SQLTYPE ホスト変数のみで、PIC X ホスト変数を date、time、または datetime2 列で使用することはありません。 必要なし。1
DB2 アプリケーションが PIC X 入力ホスト変数で DATE、TIME、および TIMESTAMP の値を使用します。さらに、SQL Server の character 列と date、time、および datetime2 列の両方でそれらの値を使用し、character 列は、DATE、TIME、または TIMESTAMP 値と混同される可能性のある形式のデータを使用する場合があります。 SERVER
アプリケーションがデフォルトの SQL Server 形式と一致する DB2 メインフレームの DATE または TIME 形式 (あるいはその両方) を使用します。さらに、SQL Server の character 列または date 列 (あるいはその両方) でそれらの値を使用します。 必要なし。DETECTDATE、DATE、または TIME HCOSS SQL コンパイラ指令オプションを使用しません。
1オプションで、代替の日付時刻の HCOSS SQL コンパイラ指令オプションを使用できます。
注: すべての DETECTDATE オプションの詳細については、DETECTDATE HCOSS SQL コンパイラ指令オプションのトピックを参照してください。

出力ホスト変数

DIALECT=MAINFRAME 指令を使用して HCOSS を有効化することで、HCOSS は次のようにメインフレームのデフォルト形式で、SQL Server に datetime および datetime2 データ型を返します。

メインフレーム データ型 SQL Server データ型 メインフレーム デフォルト形式
DATE date yyyy-mm-dd
TIME time hh.mm.ss
TIMESTAMP datetime2 yyyy-mm-dd-hh.mm.ss.ffffff
DATE および TIME 指令
また、オプションの DATE および TIME HCOSS 指令を指定できます。これにより、USA、EUR、または JIS など、SQL Server の日付と時刻の列に対して異なる出力ホスト変数の形式を指定できます。
注: DETECTDATE 指令を省略すると、DATE および TIME 指令は出力形式にのみ影響します。
DATE、TIME、および DETECTDATE 指令
DETECTDATE 指令に加えて、DATE または TIME 指令 (あるいはその両方) を指定する場合、指定した DATE および TIME 形式は入力および出力ホスト変数の両方の形式を決定します。

SQL 文における日付時刻のリテラル

HCOSS は、SQL 文の中のリテラルもサポートします。この機能を有効にするには、DB2 メインフレーム アプリケーションの中のリテラル宣言の前に次の SQL コメントのいずれかを配置します。これらのコメントは、HCOSS にリテラル値が DB2 データベースの DATE、TIME、TIMESTAMP、または CHAR で使用されるかどうかについて指示します。

  • /*#CHAR*/
  • /*#DATE*/
  • /*#TIME*/
  • /*#TIMESTAMP*/

具体的には、CHAR リテラル指定は、HCOSS リテラルを変換したくない場合に非常に役に立ちます。