集合演算子の結果によって、操作中に最初のSELECT文で定義される列のデータ型が評価されます。最初のSELECT文にある列が明示NULLとして定義される場合、結果のデータ型は直感的には認識されません。
次に、直感的には同一結果を評価すると思われるが、そうではない2つの例を示します。
最初に、明示NULLが列値として選択されます。
SELECT 'p', NULL FROM TableVM UNION SELECT 'q', 145.87 FROM TableVM;
BTEQは以下の結果を戻します。
'p' Null --- ----------- p ? q 145
Null列の第2行に対する予期値は、予期した値、つまり10進値145.87とは異なる可能性があります。
合併の2つのSELECTの順序が逆になると、
SELECT 'q', 145.87 FROM TableVM UNION SELECT 'p', NULL FROM TableVM;
BTEQは以下の結果を戻します。
'q' 145.87 --- ----------- p ? q 145.87
qの値は、 真のデータ型(DECIMAL)として報告されます。このとき切り捨ては行なわれません。なぜ、この違いがあるのでしょう。
最初の合併の例では、明示NULLは最初のSELECT文の第2列に指定されます。第2SELECT文の第2列は、DECIMAL数として指定されますが、整数に評価します。これは、このコンテキスト内で、NULLは値を持ちませんが、データ型INTEGERを持ち、その型が合併の結果に保存されるからです。
第2の合併の例では、値145.87のデータ型(DECIMAL)が結果を指定します。
次のSELECT文を実行して、NULLおよび 145.87の変換されないデータ型を確認することができます。
SELECT TYPE(NULL), TYPE(145.87)
BTEQは以下の結果を戻します。
Type(Null) Type(145.87) ----------------- ---------------------- INTEGER DECIMAL(5,2)