ブール値(boolean)に対する演算子として、and、or、notが使えます。 SQLとは違い、nullというブール値はありません。
| 演算 | 結果 |
|---|---|
| true and true | true |
| true and false | false |
| true or true | true |
| true or false | true |
| not true | false |
| not false | true |
andの方がorよりも優先されます。例えば、true or false and falseの結果は、
trueになります。
true or (false and false) -> true or false -> true
となるためです。
()を使って、優先順位を変えることができます。
(true or false) and false -> true and false -> false
aaa or bbbの場合、aaaがtrueならbbbは評価されずに結果はtrueになります。
また、aaa and bbbの場合、aaaがfalseならbbbは評価されずに結果はfalseになります。
x 比較演算子 y の構文で使える以下の演算子があります。
| 演算子 | 説明 |
|---|---|
| < | 小なり |
| lt | 小なり |
| > | 大なり |
| gt | 大なり |
| <= | 以下 |
| le | 以下 |
| >= | 以上 |
| ge | 以上 |
| = | 等しい |
| eq | 等しい |
| != | 等しくない |
| ne | 等しくない |
| <> | 等しくない |
< >をXMLに記述する場合は、< >のように記述します。
間違えやすいので、lt,gt,le,geの比較演算子を使った方がいいでしょう。
nullがある場合、以下のようになります。
<,>,<=,>=は、x,yどちらかにnullがあると結果はfalseになります。
=は、x,yどちらもnullあるいは、x,yどちらもnullではなくて等しい場合に、trueになります。
!=,<>は、x,yどちらもnullの場合はfalse、x,yどちらかがnullの場合は、trueになります。
x is null x is not null標準的なSQLとは異なり、次の構文も同じ意味になります。
x = null x != null
Nazunaには、以下の算術演算子があります。
| 演算子 | 説明 | 例 | 結果 |
|---|---|---|---|
| + | 和 | 1 + 2 | 3 |
| - | 差 | 1 - 2 | -1 |
| * | 積 | 2 * 3 | 6 |
| / | 商 ※1 | 4 / 2 | 2 |
| % | 余り | 5 / 2 | 1 |
Flowletには、以下の算術関数があります。
| 関数 | 戻り値の型 | 説明 | 例 | 結果 |
|---|---|---|---|---|
| abs(Integer) | Integer | 絶対値 | abs(-1) | 1 |
| abs(Long) | Long | 絶対値 | abs(-10000000000) | 10000000000 |
| abs(BigDecimal) | BigDecimal | 絶対値 | abs(-1.0) | 1.0 |
| ceil(BigDecimal) | BigDecimal | 引数より小さくない最小の整数 | ceil(-1.5) | -1.0 |
| degrees(BigDecimal) | BigDecimal | 度に対応するラジアン | degrees(0.5) | 28.6478897565412 |
| exp(BigDecimal) | BigDecimal | 指数 | exp(1.0) | 2.71828182845905 |
| floor(BigDecimal) | BigDecimal | 引数より大きくない最大の整数 | floor(-42.8) | -43 |
| ln(BigDecimal) | BigDecimal | 自然対数 | ln(2.0) | 0.693147180559945 |
| pow(BigDecimal base, BigDecimal e) | BigDecimal | baseのe乗 | pow(9.0, 3.0) | 729 |
| radians(BigDecimal) | BigDecimal | ラジアンに対応する度 | radians(45.0) | 0.785398163397448 |
| random() | BigDecimal | 0.0 〜 1.0 の乱数 | random() | |
| round(BigDecimal) | Long | 四捨五入 | round(42.4) | 42 |
| sign(Integer) | Integer | 引数の符号(-1, 0, 1) | sign(-3) | -1 |
| sign(Long) | Integer | 引数の符号(-1, 0, 1) | sign(-30000000000) | -1 |
| sign(BigDecimal) | Integer | 引数の符号(-1, 0, 1) | sign(-3.0) | -1 |
| sqrt(BigDecimal) | BigDecimal | 平方根 | sqrt(2.0) | 1.4142135623731 |
| trunc(BigDecimal) | BigDecimal | 切捨て | trunc(42.8) | 42 |
Flowletには、以下の三角関数があります。
| 関数 | 戻り値の型 | 説明 |
|---|---|---|
| acos(BigDecimal) | BigDecimal | 逆余弦関数 |
| asin(BigDecimal) | BigDecimal | 逆正弦関数 |
| atan(BigDecimal) | BigDecimal | 逆正接関数 |
| atan2(BigDecimal x, BigDecimal y) | BigDecimal | y/x の逆正接関数 |
| cos(BigDecimal) | BigDecimal | 余弦関数 |
| sin(BigDecimal) | BigDecimal | 正弦関数 |
| tan(BigDecimal) | BigDecimal | 正接関数 |
Flowletには、以下の文字列演算子があります。
| 演算子 | 戻り値の型 | 説明 | 例 | 結果 |
|---|---|---|---|---|
| String || String | String | 文字列の連結 | 'Hello ' || 'Nazuna' | 'Hello Nazuna' |
Flowletには、以下の文字列関数があります。
| 関数 | 戻り値の型 | 説明 | 例 | 結果 |
|---|---|---|---|---|
| ascii(String) | Integer | 引数の第一文字のASCIIコード | ascii('x') | 120 |
| btrim(String str[, String trim]) | String | trim(デフォルトはスペース)で指定された文字のみを含む最長の文字列をstrの先頭と末尾から削除します。 | btrim('aabxyzbba', 'ab') | 'xyz' |
| chr(Integer) | String | ASCIIコードに対応する文字 | chr(120) | 'x' |
| length(String) | Integer | 文字数 | length('なずな') | 3 |
| lower(String) | String | 文字列を小文字に変換 | lower('NAZUNA') | 'nazuna' |
| lpad(String str, Integer length[, String fill]) | String | fill(デフォルトはスペース)をstrの先頭に追加してlengthの長さにします。strがlengthの長さを越えている場合は(右側が)切り捨てられます。 | lpad('abc', 6, 'xy') | 'xyxabc' |
| ltrim(String str[, String trim]) | String | trim(デフォルトはスペース)で指定された文字のみを含む最長の文字列をstrの先頭から削除します。 | ltrim('aabxyz', 'ab') | 'xyz' |
| position(String:str2 in String:str) | Integer | str中のstr2の位置(最初の文字は1)。 | position('cd' in 'abcde') | 3 |
| repead(String str, Integer num) | String | strをnum回繰り返します。 | repead('Nz', 4) | 'NzNzNzNz' |
| rpad(String str, Integer length[, String fill]) | String | fill(デフォルトはスペース)をstrの末尾に追加してlengthの長さにします。strがlengthの長さを越えている場合は(右側が)切り捨てられます。 | rpad('abc', 6, 'xy') | 'abcxyx' |
| rtrim(String str[, String trim]) | String | trim(デフォルトはスペース)で指定された文字のみを含む最長の文字列をstrの末尾から削除します。 | rtrim('xyzaab', 'ab') | 'xyz' |
| strpos(String str, String str2) | Integer | str中のstr2の位置。positionと引数の順序が逆になります。 | strpos('abcde', 'cd') | 3 |
| substr(String str, Integer pos[, Integer num]) | String | str中のpos番目(最初の文字は1)からnum文字を取り出します。numを指定しない場合は、最後の文字まで取り出します。 | substr('abcdef', 3, 2) | 'cd' |
| substring(String:str from Integer:pos [for Integer:num]) | String | substrと同じです。 | substr('abcdef' from 3 for 2) | 'cd' |
| trim([leading | trailing | both] [String:trim] from String:str) | String | trim(デフォルトはスペース)で指定された文字のみを含む最長の文字列をstrの先頭、末尾、両側から削除します。 | trim(both 'ab' from 'aabxyzbba') | 'xyz' |
| upper(String) | String | 文字列を大文字に変換 | upper('nazuna') | 'NAZUNA' |
| translate(String str, String src, String dest) | String | str中のsrcで指定された文字列をdestで置き換えます。 | translate('abcdefgcd', 'cd', '12') | 'ab12efg12' |
Flowletには、以下の日付関数があります。
| 関数 | 戻り値の型 | 説明 |
|---|---|---|
| now() | Timestamp | 現在日時 |
Flowletでは、SQLのようにlikeを使ったパターンマッチングができます。
String:str like String:pattern String:str not like String:pattern
patternは、文字列の集合です。 likeは、patternによって示される文字列の集合にstrが含まれていればtrueを返します。
patternがパーセント記号(%)もしくはアンダースコア(_)を含んでいない場合、
patternは文字列そのものです。
アンダースコア(_)は、任意の一文字とマッチし、
パーセント記号(%)は、0文字以上の任意の文字列とのマッチします。
'xyz' like 'xyz' -> true 'xyz' like 'abc' -> false 'xyz' like 'x%' -> true 'xyz' like 'x_z' -> true 'xyz' like '__z' -> true
Flowletでは、正規表現を使ったパターンマッチングもできます。
| 演算子 | 説明 | 例 |
|---|---|---|
| ~ | 正規表現にマッチ、大文字小文字の区別あり | 'abcAde' ~ '[a-zA-Z]*' |
| ~* | 正規表現にマッチ、大文字小文字の区別なし | 'abcAde' ~* '[a-z]*' |
| !~ | 正規表現にアンマッチ、大文字小文字の区別あり | 'abcAde' !~ '[a-zA-Z]*' |
| !~* | 正規表現にアンマッチ、大文字小文字の区別なし | 'abcAde' !~* '[a-z]*' |
条件に応じた値を返したい場合、case式を使うことができます。
下記の形式のcase式は、Javaのif文に似ています。
最初のwhen句の式がtrueの場合、then句の値を返します。。
falseであれば、同じように後続のwhenが調べられます。
すべてのwhen句の式がfalseの場合、else句の値を返します。。
else句がない場合は、nullを返します。
case when booleanを返す式 then 値
[when booleanを返す式 then 値]
[else 値]
end
例(aは変数)
case when a = 1 then 'one'
when a = 2 then 'two'
else 'other'
end
下記の形式のcase式は、Javaのswitch文に似ています。
式と最初のwhen句の値が等しい場合、then句の値を返します。。
等しくない場合、同じように後続のwhenが調べられます。
すべてのwhen句の式がfalseの場合、else句の値を返します。
else句がない場合は、nullを返します。
case 式
when 値 then 値
[when 値 then 値]
[else 値]
end
上記のcase式は、下記のcase式の簡略形です。
case when 式 = 値 then 値
[when 式 = 値 then 値]
[else 値]
end
coalesceは、nullでない最初の引数を返します。
coalesce(value[, ...])
nullifは、value1とvalue2が等しい場合にnullを返します。 それ以外は、value1を返します。
nullif(value1, value2)
Flowletには、以下の型変換関数があります。