Hitachi

Hitachi Advanced Data Binder SQLリファレンス


7.20.1 値式の指定形式および規則

SQL文中で指定する値は,列名,定数,集合関数,スカラ関数,ウィンドウ関数,CASE式,四則演算(/ ),連結演算(||)などを使って指定できます。この指定を値式といいます。値式の例を次に示します。

(例)
  • 列名だけを指定する "C1"

  • 定数だけを指定する 'HADB'100DATE'2011-09-06'

  • 列名と四則演算を使って指定する "C1"+10

  • 列名と連結演算を使って指定する "C1"||"C2"

  • 集合関数と四則演算を使って指定する MAX("C1")/2

〈この項の構成〉

(1) 指定形式

値式::={数値式文字値式日時値式バイナリ値式数値式::={値式一次子四則演算文字値式::={値式一次子連結演算日時値式::={値式一次子日時演算バイナリ値式::={値式一次子連結演算値式一次子::={(値式)|列指定値指定集合関数スカラ関数ウィンドウ関数CASE式ラベル付き間隔スカラ副問合せ
配列要素参照

(2) 指定形式の説明

四則演算

四則演算の詳細については,「7.25 四則演算」を参照してください。

連結演算

連結演算の詳細については,「7.26 連結演算」を参照してください。

日時演算

日時演算の詳細については,「7.27 日時演算」を参照してください。

列指定

列指定の詳細については,「6.1.5 名前の修飾」の「(5) 列指定の指定形式」を参照してください。

値指定

値指定の詳細については,「7.21 値指定」を参照してください。

集合関数

集合関数の詳細については,「7.22 集合関数」を参照してください。

スカラ関数

スカラ関数の詳細については,「8. スカラ関数」を参照してください。

ウィンドウ関数

ウィンドウ関数については,「7.23 ウィンドウ関数」を参照してください。

CASE式

CASE式の詳細については,「7.29 CASE式」を参照してください。

ラベル付き間隔

ラベル付き間隔の詳細については,「7.28 ラベル付き間隔」を参照してください。

スカラ副問合せ

スカラ副問合せの詳細については,「7.3 副問合せ」を参照してください。

配列要素参照

配列要素参照の詳細については,「7.30 配列要素参照」を参照してください。

(3) 規則

  1. 値式中には,スカラ演算と集合関数を合計500個まで指定できます。値式中に指定した列が,ビュー表の列,導出表の列,または問合せ名の列の場合,その基となる値式を展開したあとの値式の総数が10,000個以内となるようにしてください。

    なお,ビュー表,導出表,または問合せ名の指定内容によっては,値式が付加されることがあります。値式が付加される条件については,「7.31.6 内部導出表にスカラ関数CONVERTを付加する条件」を参照してください。

    スカラ演算とは,値式中で指定できる演算のうち,次に示すものの総称です。

    • 四則演算

    • 連結演算

    • 日時演算

    • スカラ関数

    • ウィンドウ関数

    • CASE

    • 配列要素参照

  2. 次に示すスカラ演算を入れ子にして指定する場合,入れ子の上限は15回になります。値式中に指定した列がビュー表の列,または導出表の列の場合,その基となる値式を展開したあとに対象となるスカラ演算の入れ子の数が15回以内となるようにしてください。

    なお,ビュー表または導出表の指定内容によっては,値式が付加されることがあります。値式が付加される条件については,「7.31.6 内部導出表にスカラ関数CONVERTを付加する条件」を参照してください。

    また,スカラ演算を混在させて入れ子にした場合も,合計の入れ子の上限が15回になります。

    • スカラ関数

    • ウィンドウ関数

    • CASE

    入れ子の数え方の例を次に示します。

    例1:スカラ関数SUBSTRを15回入れ子にして指定

    SUBSTR(SUBSTR(SUBSTR(SUBSTR(SUBSTR(
    SUBSTR(SUBSTR(SUBSTR(SUBSTR(SUBSTR(
    SUBSTR(SUBSTR(SUBSTR(SUBSTR(SUBSTR(
    SUBSTR("C1",1),1),1),1),1),1),1),1),1),1),1),1),1),1),1),1)

    例2:CASE式中にCASE式を繰り返し,2回入れ子にして指定

    CASE WHEN 
        CASE WHEN 
                    CASE WHEN "C1">100
                        THEN  "C1"-100
                        ELSE "C1"
                    END >100
                THEN "C1"-100
                ELSE "C1"
            END >100
        THEN "C1"-100
        ELSE "C1"
    END

    例3:CASE式とスカラ関数SUBSTRを混在させて指定(この場合,入れ子は2回)

    SUBSTR(CASE WHEN "C1">100 THEN SUBSTR("C2",1,10)
                              ELSE SUBSTR("C2",1,5)
           END,1,5)
  3. 演算途中でオーバフローが発生した場合,SQLがエラーになります。

  4. スカラ演算の評価順序の優先順位を次に示します。

    • 括弧内

    • *または/

    • ,または||

  5. 定数と等価な値式となる条件を次の表に示します。ただし,値式の結果のデータ型およびデータ長は,定数のデータ型およびデータ長ではなく,各値式から導き出されたデータ型およびデータ長となります。

    表7‒12 定数と等価な値式となる条件

    項番

    値式の種類

    定数と等価な値式となる条件

    1

    四則演算

    第1演算項,および第2演算項に定数を指定した場合

    2

    連結演算

    3

    日時演算

    次に示すすべての条件を満たした場合

    • 第1演算項に定数を指定した場合

    • 第2演算項がラベル付き間隔で,ラベル付き間隔に指定した値式一次子に定数を指定した場合

    • 乗除算する値式一次子に定数を指定した場合(ラベル付き間隔に乗除算を指定した場合に限る)

    4

    スカラ関数

    ABS

    対象データに定数を指定した場合

    5

    ACOS

    6

    ARRAY_MAX_CARDINALITY

    常に定数として扱います。

    7

    ASCII

    対象データに定数を指定した場合(ただし,次の場合を除きます)

    • 対象データに実長0バイトまたは実長0文字のデータを指定した場合

    8

    ASIN

    対象データに定数を指定した場合

    9

    ATAN

    10

    ATAN2

    対象データ1および対象データ2に定数を指定した場合

    11

    BIN

    対象データに定数を指定した場合

    12

    BITAND

    対象データ1および対象データ2に定数を指定した場合

    13

    BITLSHIFT

    対象データおよびシフトビット数に定数を指定した場合

    14

    BITNOT

    対象データに定数を指定した場合

    15

    BITOR

    対象データ1および対象データ2に定数を指定した場合

    16

    BITRSHIFT

    対象データおよびシフトビット数に定数を指定した場合

    17

    BITXOR

    対象データ1および対象データ2に定数を指定した場合

    18

    CAST

    変換対象データに定数を指定した場合(ただし,次の場合を除きます)

    • 実長が0バイトの文字列定数に対して,文字データ以外への変換を指定した場合

    19

    CEIL

    対象データに定数を指定した場合

    20

    CHR

    対象データに定数を指定した場合(ただし,次の場合を除きます)

    • 対象データに負の整数値を指定した場合

    21

    COALESCE

    引数に指定した対象データが1つであり,かつ定数を指定した場合

    22

    CONCAT

    対象データ1および対象データ2に定数を指定した場合

    23

    CONVERT

    変換対象データに定数を指定した場合(ただし,次の場合を除きます)

    • 実長が0バイトの文字列定数に対して,文字データ以外への変換を指定した場合

    • 書式指定を指定した場合

    24

    COS

    対象データに定数を指定した場合

    25

    COSH

    26

    DATEDIFF

    開始日時および終了日時に定数を指定した場合

    27

    DAYOFWEEK

    対象データに定数を指定した場合

    28

    DAYOFYEAR

    29

    DEGREES

    角度に定数を指定した場合

    30

    EXP

    指数に定数を指定した場合

    31

    EXTRACT

    抽出元データに定数を指定した場合

    32

    FLOOR

    対象データに定数を指定した場合

    33

    GETAGE

    生年月日および基準日に定数を指定した場合

    34

    HEX

    対象データに定数を指定した場合

    35

    LASTDAY

    日時データに定数を指定した場合

    36

    LEFT

    抽出元の文字データおよび抽出文字数に定数を指定した場合(ただし,次の場合を除きます)

    • 抽出文字数に負の値を指定した場合

    37

    LENGTH

    対象データに定数を指定した場合

    38

    LENGTHB

    39

    LN

    40

    LOG

    底および対象データに定数を指定した場合

    41

    LOWER

    変換対象の文字データに定数を指定した場合

    42

    LPAD

    対象データ,文字数,および埋め込み文字列に定数を指定した場合(ただし,次の場合を除きます)

    • 文字数に負の値を指定した場合

    43

    LTRIM

    対象データおよび削除文字に定数を指定した場合

    44

    MOD

    被除数および除数に定数を指定した場合

    45

    PI

    常に定数として扱います。

    46

    POWER

    対象データおよび指数に定数を指定した場合

    47

    RADIANS

    角度に定数を指定した場合

    48

    REPLACE

    次のどちらかの条件を満たす場合

    • 対象データ,置換対象文字列,および置換後の文字列に定数を指定した場合

    • 対象データおよび置換対象文字列に定数を指定し,置換後の文字列を省略した場合

    49

    RIGHT

    抽出元の文字データおよび抽出文字数に定数を指定した場合(ただし,次の場合を除きます)

    • 抽出文字数に負の値を指定した場合

    50

    ROUND

    • 数学関数のROUNDの場合

      対象データおよび桁数に定数を指定した場合

    • 日時関数のROUNDの場合

      日時データに定数を指定した場合

    51

    RPAD

    対象データ,文字数,および埋め込み文字列に定数を指定した場合(ただし,次の場合を除きます)

    • 文字数に負の値を指定した場合

    52

    RTRIM

    対象データおよび削除文字に定数を指定した場合

    53

    SIGN

    対象データに定数を指定した場合

    54

    SIN

    55

    SINH

    56

    SQRT

    57

    SUBSTR

    抽出元の文字データ,開始位置,および抽出文字数に定数を指定した場合(ただし,次の場合を除きます)

    • 抽出文字数に負の値を指定した場合

    58

    SUBSTRB

    抽出元のバイナリデータ,開始位置,および抽出バイト数に定数を指定した場合(ただし,次の場合を除きます)

    • 抽出バイト数に負の値を指定した場合

    59

    TAN

    対象データに定数を指定した場合

    60

    TANH

    61

    TIMESTAMPADD

    加算値および対象データに定数を指定した場合

    62

    TIMESTAMPDIFF

    開始日時および終了日時に定数を指定した場合

    63

    TRANSLATE

    対象データ,置換対象文字,および置換後の文字に定数を指定した場合

    64

    TRIM

    対象データおよび削除文字に定数を指定した場合

    65

    TRUNC

    • 数学関数のTRUNCの場合

      対象データおよび桁数に定数を指定した場合

    • 日時関数のTRUNCの場合

      日時データに定数を指定した場合

    66

    UPPER

    変換対象の文字データに定数を指定した場合