式の指定

には、SQL処理で使用するを指定します。

式は、算術演算子、比較演算子、文字列またはバイナリ演算子、ビット演算子、または「関数」で説明するいずれかの関数で連結された1つまたは複数のプライマリで構成できます。プライマリは、SQL構文に示された項目から算出される、符号付きまたは符号なしの値です。

SQL構文

{ColumnName | ROWID | {? | :DynamicParameter} |
  Function | Constant | (Expression)}

または

[[+ |-] {ColumnName | SYSDATE | TT_SYSDATE|GETDATE() |
{? | :DynamicParameter} | Function |
Constant | {~ | + | -} Expression}]
 [...]

または

Expression1 [& | | | ^ | + | / | * | - ] Expression2

または

Expression1 | | Expression2

または

Expression
構成要素 説明

+, –

単項プラスと単項マイナス

単項マイナスはプライマリの符号を変更します。デフォルトの設定では、符号は変更しません。

ColumnName

値を取得する列の名前

詳細は、「名前、ネームスペースおよびパラメータ」を参照してください。

ROWID

表に保存される各行の一意のID

ROWID値はROWID擬似列から取得されます。

?

:DynamicParameter

動的パラメータのプレースホルダ

動的パラメータの値は、実行時に設定されます。

Function

計算された値

詳細は、「関数」を参照してください。

Constant

特定の値

詳細は、「定数」を参照してください。

(Expression)

カッコで囲まれた任意の式

Expression1

Expression2

指定された式

Expression1Expression2は、ビット単位演算子とともに使用すると、整数型またはバイナリ型にできます。式のデータ型には互換性が必要です。詳細は、「データ型」を参照してください。

*

2つのプライマリを乗算します

/

2つのプライマリを除算します

+

2つのプライマリを加算します

2つのプライマリを減算します

&

2つのオペランドのビット単位のAND

Expression1Expression2の対応するビットがどちらも1の場合にのみ、ビットを1に設定します。ビットが異なるか、いずれも0の場合は、ビットを0に設定します。

|

2つのオペランドのビット単位のOR

Expression1Expression2の対応するビットのうち、どちらかまたは両方が1の場合に、ビットを1に設定します。対応するビットの両方が0の場合は、ビットを0に設定します。

~

オペランドのビット単位のNOT

Expressionを1つのみ取り出し、オペランドの各ビットを逆にして、すべての1を0 (ゼロ)に、0 (ゼロ)を1に変更します。

^

2つのオペランドの排他OR

Expression1Expression2の対応するビットが異なる場合はビットを1に設定し、同じ場合は0 (ゼロ)に設定します。一方のビットが0(ゼロ)で他方のビットが1の場合、対応する結果ビットは1に設定されます。それ以外の場合、対応する結果ビットは0(ゼロ)に設定されます。

||

連結演算子

両方の式が文字列の場合に、Expression1Expression2を連結します。両方の式の値を含む、新しい文字列値を作成します。詳細は、「CONCAT」を参照してください。

説明

  • 数値間の計算には、算術演算子を使用できます。詳細は、「数値データ型」を参照してください。

  • 日時値および時間隔型でも、算術演算子を使用できます。日時式の結果は、日時データ型または時間隔データ型です。

  • 文字列値に算術演算子は使用できません。

  • 式の各要素は、次の順序で評価されます。

    • カッコ内の関数および式。

    • 単項プラスと単項マイナス。

    • *および/の演算

    • +およびの演算

    • 優先順位が同じ要素については、左から右の順に評価されます。

  • 式をカッコで囲み、評価の順序を制御できます。次に例を示します。

    10 * 2 – 1 = 19 but 10 * (2 – 1) = 10
    
  • 評価される式によっては、データ型の変換、切捨て、アンダーフロー、オーバーフローが発生する場合があります。詳細は、「データ型」を参照してください。

  • 数値式のいずれかのオペランドがNULLの場合、結果はNULLになります。

  • NVLは、2つのパラメータ(両方とも式で指定)をとるため、TimesTenではどちらの位置にもNULLは使用できません。式にNULL値が含まれる場合、比較演算子や他の条件はNULLと評価されます。NULL値を含む比較演算子や条件の評価の詳細は、「検索条件」を参照してください。TimesTenではNULLを挿入することはできますが、通常、INSERTには特定の値のみが使用され、一般的な式は使用されません。

  • 条件に、別々のROWID等式を指定するか、またはINを使用すると、問合せオプティマイザと実行エンジンで複数のROWID検索が可能です。たとえば、複数の高速ROWID検索は、次のように実行します。

    WHERE ROWID = :v1 OR ROWID = :v2
    

    または、次のように指定します:

    WHERE ROWID IN (:v1, :v2)
    
  • ?または:DynamicParameterは、式の中で動的パラメータとして使用できます。

この例では、任意のSELECT文のWHERE句における動的パラメータを示します。

SELECT * FROM purchasing.orders
  WHERE partnumber = ? AND ordernumber > ?
  ORDER BY ordernumber;

この例では、UPDATE文のWHERE句およびSET句における動的パラメータを示します。

UPDATE purchasing.parts
  SET salesprice = :dynamicparameter1
  WHERE partnumber = :dynamicparameter2;

この例では、DELETE文のWHERE句における動的パラメータを示します。

DELETE FROM purchasing.orderitems
  WHERE itemnumber BETWEEN ? AND ?;

この例では、INSERT文のVALUES句における動的パラメータを示します。この例では、?:dynamicparameterの両方が使用されています。:dynamicparameter1は、purchasing.orderitems表の2番目と4番目の列の両方に対応しています。そのため、この式には、2番目と4番目の列の両方に使用する2番目のパラメータを使用して、4つの動的パラメータのみを渡す必要があります。

INSERT INTO purchasing.orderitems VALUES  
   (?,:dynamicparameter1,
      :dynamicparameter2,
      :dynamicparameter1,?);

この例は、同じSQL文で?と:dynamicparameterの両方を使用できることと、両方のタイプの動的パラメータを繰り返すことの意味上の違いを示しています。

ビット単位演算子の例を次に示します。

Command> SELECT 0x183D & 0x00FF FROM dual;
< 003D >
1 row found.
Command> SELECT ~255 FROM dual;
< -256 >
1 row found.
Command> SELECT 0x08 | 0x0F FROM dual;
< 0F >
1 row found.