サポート > リポジトリ > 計算式 > 計算式の例
ja | en

年齢や所要時間の算出をはじめとする、さまざまな自動計算式の記述例を紹介します。

文字列型の「備考 (note)」項目に含まれる文字列から余分なスペース(半角、全角)、タブ、改行文字を取り除くには、次の式を設定します。

TRIM(${note})

詳細は「TRIM関数」の説明をお読み下さい。

日付型の「加入日 (joinday)」項目に入力された日から現在までの経過月数を計算します。

DATEDIF(${joinday}, TODAY(), "M")

詳細は「DATEDIF関数」の説明をお読み下さい。

「顧客(customer)」モデルにおいて、「生年月日(birth)」項目と「年齢(age)」項目を用意した例を示します。

年齢項目(整数型)の自動計算式を次のように記載します。
DATEDIF(${birth}, TODAY() ,"Y")

「何年何ヶ月」という表記を行なわせることもできます。この場合、年齢項目は文字列型とします。

改行は入力しなくとも結構です。(ここでは見やすくするために入れています。)

DATEDIF(${birth}, TODAY() ,"Y") +
  "年" +
  DATEDIF(${birth}, TODAY() ,"YM") +
  "ヶ月"

詳細は「DATEDIF関数」の説明をお読み下さい。

サポートモデルの「開始時間(date1)」と「終了時間(date2)」から、「所要時間」を自動算出させる例を示します。 ここで「所要時間」の方は時刻型としてください。なお、24 時間を超過した分は切り捨てられます。

BETWEENTIME(${date1}, ${date2})

この詳細は「BETWEENTIME関数」の説明をお読み下さい。

退勤時間(endtime)と出勤時間(starttime)の差を求めます。ただし、休憩時間(breaktime)を考慮します。 各項目はすべて時刻型として定義しています。

改行は入力しなくとも結構です。(ここでは見やすくするために入れています。)

TIMEVALUE(
  TEXT(
    TIME(${endtime})-
    TIME(${starttime})-
    TIME(${breaktime}),
    "HH:mm:ss"
  )
)

上の計算式は、次のように記述することもできます。

改行は入力しなくとも結構です。(ここでは見やすくするために入れています。)

BETWEENTIME(
  TOTIME(
    MOVEMINUTE(${starttime},
      HOUR(${breaktime})*60 +
      MINUTE(${breaktime})
    )
  ),
  ${endtime}
)

繰り返しコンテナ内の項目同士で所要時間を求める例を示します。

図1 動作イメージ

用意する項目

次のように繰り返しコンテナを定義します。

図2 繰り返しコンテナを用意する

「時間差分」(kks/keisan)項目に次の式を設定します。

TIMEVALUE(
  TEXT(
    TIME(${kks/komoku2})-
    TIME(${kks/komoku1}),
    "HH:mm:ss"
  )
)

日付型項目「出荷日 (syukka_date)」の曜日を求める例を示します。

改行は入力しなくとも結構です。(ここでは見やすくするために入れています。)

CHOOSE(WEEKDAY(${syukka_date}),
  "日","月","火","水","木","金","土")

この詳細は「WEEKDAY関数」と「CHOOSE関数」の説明をお読み下さい。

製品モデルの整数型項目「製品ID (productid)」(主キー)をゼロ詰めの 4 桁と定義する例を示します。

PADDING("0", 4, ${productid})

この詳細は「PADDING関数」の説明をお読み下さい。

数値型項目 source の値により、同モデル内の数値型項目 cvalue を変えるという例を紹介します。 次のようなルールを実現するものとします。

source の値 cvalue の値
10より小さい 100
20より小さい 200
それ以外 300

このとき、項目 cvalue の式は次のように記述することができます。

改行は入力しなくとも結構です。(ここでは見やすくするために入れています。)

IF(${source}<10,
  100,
  IF(${source}<20,
    200,
    300
  )
)

「計画日(plandate)」と「実績日(realdate)」を含むモデル定義があるものとします。ここで、「遅延」(整数型)の値を次のルールによって算出するものとします。

条件 遅延の算出ルール
実績日が未入力 今日の日付と、計画日(plandate)との差
実績日が入力済 実績日(realdate)と、計画日(plandate)との差

このとき、遅延項目(整数型)の式は次のように記述することができます。

改行は入力しなくとも結構です。(ここでは見やすくするために入れています。)

IF(${realdate}==null,
  DATEDIF(${plandate},TODAY(),"D"),
  DATEDIF(${realdate},${plandate},"D")
)

ここで "${realdate}==null" とは、この値がセットされていないという意味です。 null と比較できる項目の型は文字列型、日付型、時刻型、日付時刻型です。

文字列項目 sitem1 と sitem2 を連結した、sitem3 を自動計算として記述することもできます。

次のような式になります。

${sitem1}+":"+${sitem2}

ところで上記式の場合、sitem1 または sitem2 の値が未設定(null)の場合や、空白の場合を考慮していません。 sitem1 と sitem2 のいずれもが有効(未設定でなく、空白でもない)の場合にのみ sitem3 を出力する場合は、次のような式になります。

改行は入力しなくとも結構です。(ここでは見やすくするために入れています。)"+" 演算子の代わりに、CONCATENATE 関数を使うこともできます。

IF(
  AND(
    !ISBLANK(${sitem1}), !ISBLANK(${sitem2})
  ),
  ${sitem1}+":"+${sitem2},
  ""
)

繰り返しコンテナ payment 内に、日付型項目 pdate と金額 amount が用意されています。 このとき、payment/amount の合計値を(この繰り返しコンテナではない)total 項目にセットするようにします。 ただし、次のルールを適用します。

  • payment/pdate が本日の日付より前であれば payment/amount の値を用いる。
  • そうでなければ 0 とする。

集計値を格納する項目 total に条件付き SUM 関数を適用します。

改行は入力しなくとも結構です。(ここでは見やすくするために入れています。)

SUM(${payment/amount},
  "DATE(${payment/pdate})<=DATE(TODAY())")

日付の比較を行う場合、DATE 関数を使って日付を数値化する必要があります。

以上を整理すると、次のような定義になります。(必要な項目のみ抜粋しています。)

項目名(日本語) 項目名(英語) 項目の型 自動計算式
集計 total 8バイト整数 SUM(${payment/amount},
"DATE(${payment/pdate})<=DATE(TODAY())")
支払 payment 繰り返しコンテナ
支払回数 payment/pid 繰り返しコンテナID
支払日 payment/pdate 日付
支払金額 payment/amount 8バイト整数

「売上」項目(数値)を、繰り返しコンテナに按分する方法を説明します。 ただし、余りが生じた場合は先頭の繰り返しコンテナに加えるというルールとします。

例えば売上値が"100"のとき、繰り返しコンテナが二つなら "50","50" になります。三つなら "34","33","33" になります。八つに分割したときの動作例を図1に示します。

図1 売上の按分

売上項目を uriage とし、繰り返しコンテナの数を記憶する項目を count とします。 count 項目には次の式を適用します。

COUNT(${cont})

繰り返しコンテナ項目「各売上」の式を次のように設定します。

CID関数は繰り返しコンテナの行数を返します。 ROUND関数は数値を四捨五入して指定された桁数にします。 MOD関数は数値を除数で割った余りを求めます。

IF(CID()==1,
  ROUND(${uriage}/${count},0)+MOD(${uriage},${count}),
  ROUND(${uriage}/${count},0)
)

「SQL式 > 保存前の値を保持する項目を用意する」をお読みください。