7.21.1 値式の指定形式および規則
SQL文中で指定する値は,列名,定数,集合関数,スカラ関数,ウィンドウ関数,CASE式,四則演算(+,−,*,/ ),連結演算(+,||)などを使って指定できます。この指定を値式といいます。値式の例を次に示します。
- (例)
-
-
列名だけを指定する "C1"
-
定数だけを指定する 'HADB',100,DATE'2011-09-06'
-
列名と四則演算を使って指定する "C1"+10
-
列名と連結演算を使って指定する "C1"||"C2"
-
集合関数と四則演算を使って指定する MAX("C1")/2
-
- 〈この項の構成〉
(1) 指定形式
値式::={数値式|文字値式|日時値式|バイナリ値式}
数値式::={値式一次子|四則演算}
文字値式::={値式一次子|連結演算}
日時値式::={値式一次子|日時演算}
バイナリ値式::={値式一次子|連結演算}
値式一次子::={(値式)|列指定|値指定|集合関数
|スカラ関数|ウィンドウ関数|CASE式
|ラベル付き間隔|スカラ副問合せ
|配列要素参照}
(2) 指定形式の説明
- 四則演算:
-
四則演算の詳細については,「7.26 四則演算」を参照してください。
- 連結演算:
-
連結演算の詳細については,「7.27 連結演算」を参照してください。
- 日時演算:
-
日時演算の詳細については,「7.28 日時演算」を参照してください。
- 列指定:
-
列指定の詳細については,「6.1.5 名前の修飾」の「(5) 列指定の指定形式」を参照してください。
- 値指定:
-
値指定の詳細については,「7.22 値指定」を参照してください。
- 集合関数:
-
集合関数の詳細については,「7.23 集合関数」を参照してください。
- スカラ関数:
-
スカラ関数の詳細については,「8. スカラ関数」を参照してください。
- ウィンドウ関数:
-
ウィンドウ関数については,「7.24 ウィンドウ関数」を参照してください。
- CASE式:
-
CASE式の詳細については,「7.30 CASE式」を参照してください。
- ラベル付き間隔:
-
ラベル付き間隔の詳細については,「7.29 ラベル付き間隔」を参照してください。
- スカラ副問合せ:
-
スカラ副問合せの詳細については,「7.3 副問合せ」を参照してください。
- 配列要素参照:
-
配列要素参照の詳細については,「7.31 配列要素参照」を参照してください。
(3) 規則
-
値式中には,スカラ演算と集合関数を合計500個まで指定できます。値式中に指定した列が,ビュー表の列,導出表の列,または問合せ名の列の場合,その基となる値式を展開したあとの値式の総数が10,000個以内となるようにしてください。
なお,ビュー表,導出表,または問合せ名の指定内容によっては,値式が付加されることがあります。値式が付加される条件については,「7.32.6 内部導出表にスカラ関数CONVERTを付加する条件」を参照してください。
スカラ演算とは,値式中で指定できる演算のうち,次に示すものの総称です。
-
四則演算
-
連結演算
-
日時演算
-
スカラ関数
-
ウィンドウ関数
-
CASE式
-
配列要素参照
-
-
次に示すスカラ演算を入れ子にして指定する場合,入れ子の上限は15回になります。値式中に指定した列がビュー表の列,または導出表の列の場合,その基となる値式を展開したあとに対象となるスカラ演算の入れ子の数が15回以内となるようにしてください。
なお,ビュー表または導出表の指定内容によっては,値式が付加されることがあります。値式が付加される条件については,「7.32.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)
-
-
演算途中でオーバフローが発生した場合,SQLがエラーになります。
-
スカラ演算の評価順序の優先順位を次に示します。
-
括弧内
-
*または/
-
+,−,または||
-
-
定数と等価な値式となる条件を次の表に示します。ただし,値式の結果のデータ型およびデータ長は,定数のデータ型およびデータ長ではなく,各値式から導き出されたデータ型およびデータ長となります。
表7‒15 定数と等価な値式となる条件 項番
値式の種類
定数と等価な値式となる条件
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
変換対象の文字データに定数を指定した場合
-