is-of-type演算子

構文

is_of_type_expression ::= 
   add_expression IS [NOT] OF [TYPE] 
   "(" [ONLY] sequence_type ([ONLY] sequence_type)* ")"

セマンティクス

is-of-type演算子では、入力順序の順序タイプが1つ以上のターゲット順序タイプに対してチェックされます。ターゲット・タイプの数Nが1より大きい場合、その式は、それぞれ1つのターゲット・タイプを持つOR-ing N is-of-type式と同じになります。したがって、この項の残りの部分では、1つのターゲット・タイプのみを指定したと仮定します。

is-type-of演算子は、次の両方の条件を満たす場合にtrueを返します。
  1. 入力順序のカーディナリティが、ターゲット・タイプの数量詞に一致します。具体的には、次のようになります。
    1. 数量詞が*の場合、順序は任意の数の項目を持つことができます。
    2. 数量詞が+の場合、入力順序には少なくとも1つの項目が必要です
    3. 数量詞が?の場合、入力順序には最大で1つの項目が必要です
    4. 数量詞がない場合、入力順序には1つの項目のみが必要です。
  2. 入力順序のすべての項目は、ターゲット項目タイプ(type_def)のインスタンスです。つまり、各入力項目のタイプは、ターゲット項目タイプのサブタイプである必要があります。このチェックの目的のため、NULLは任意のタイプのインスタンスとはみなされません。

条件(1)が満たされ、入力順序にNULLが含まれる場合、is-type-of演算子の結果はNULLになります。他のすべての場合、結果はfalseになります。

例6-50 is-of-type演算子

アドレス情報が1つのフラット文字列として格納されているすべてのユーザーを検索します。

SELECT id
FROM users u
WHERE u.address IS OF TYPE (STRING);