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つの項目が必要です
- 数量詞がない場合、入力順序には1つの項目のみが必要です。
- 入力順序のすべての項目は、ターゲット項目タイプ(type_def)のインスタンスです。つまり、各入力項目のタイプは、ターゲット項目タイプのサブタイプである必要があります。このチェックの目的のため、NULLは任意のタイプのインスタンスとはみなされません。
条件(1)が満たされ、入力順序にNULLが含まれる場合、is-type-of演算子の結果はNULLになります。他のすべての場合、結果はfalseになります。
例6-42 is-type-of演算子
アドレス情報が1つのフラット文字列として格納されているすべてのユーザーを検索します。
SELECT id
FROM users u
WHERE u.address IS OF TYPE (STRING);