個々のブロックは、以下のキーワードを使用して、以下のタスクを実行するために使用することができます。
これらのうち最初の 3 項目を除き:
選択を解除するには、次の句を使用します
CLEAR SELECTION
スカラー変数を設定するには、LET キーワードを使用します。例:
LET <variable name> = <value>
リスト変数を設定するには、LIST キーワードを使用します。例:
LIST <variable name> = <value 1>, <value 2>, <value 3>, <value n>
オブジェクトを選択するには、SELECT キーワードを使用します。例:
SELECT
SELECT ALL
SELECT SELECTED
SELECT FROM pipe
SELECT ALL FROM pipe
SELECT SELECTED FROM pipe
SELECT WHERE x > 0
SELECT ALL WHERE x > 0
SELECT SELECTED WHERE x > 0
SELECT FROM pipe WHERE diameter > 250
SELECT ALL FROM pipe WHERE diameter > 250
SELECT SELECTED FROM pipe WHERE diameter > 250
現在の選択モードを使用して現在のテーブルから選択する場合、SELECT キーワードは省略できます。例:
x > 0
オブジェクトを選択解除するには、DESELECT キーワードを使用します
DESELECT
DESELECT ALL
DESELECT SELECTED
DESELECT FROM pipe
DESELECT ALL FROM pipe
DESELECT SELECTED FROM pipe
DESELECT WHERE x > 0
DESELECT ALL WHERE x > 0
DESELECT SELECTED WHERE x > 0
DESELECT FROM pipe WHERE diameter > 250
DESELECT ALL FROM pipe WHERE diameter > 250
DESELECT SELECTED FROM pipe WHERE diameter > 250
オブジェクトを削除するには、DELETE キーワードを使用します
DELETE
DELETE ALL
DELETE SELECTED
DELETE FROM pipe
DELETE ALL FROM pipe
DELETE SELECTED FROM pipe
DELETE WHERE x > 0
DELETE ALL WHERE x > 0
DELETE SELECTED WHERE x > 0
DELETE FROM pipe WHERE diameter > 250
DELETE ALL FROM pipe WHERE diameter > 250
DELETE SELECTED FROM pipe WHERE diameter > 250
フィールドまたは変数の値を変更するには、SET キーワードを使用します。代入式をカンマ(,)で区切ることにより、一度に複数の値を設定できます。
SET x = x – 100, y = y – 100
SET x = x – 100, y = y – 100 WHERE ground_level > 20
現在のテーブルと現在の選択モードを上書きするには、UPDATE キーワードを使用する必要があります
UPDATE ALL SET x = x – 100, y = y - 100
UPDATE SELECTED SET x = x – 100, y = y - 100
UPDATE node SET x = x – 100, y = y - 100
UPDATE ALL node SET x = x – 100, y = y - 100
UPDATE SELECTED node SET x = x – 100, y = y – 100
UPDATE ALL SET x = x – 100, y = y – 100 WHERE ground_level > 20
UPDATE SELECTED SET x = x – 100, y = y – 100 WHERE ground_level > 20
UPDATE node SET x = x – 100, y = y - 100 WHERE ground_level > 20
UPDATE ALL node SET x = x – 100, y = y – 100 WHERE ground_level > 20
UPDATE SELECTED node SET x = x – 100, y = y – 100 WHERE ground_level > 20
複数の値を選択するには、SELECT キーワードを使用し、その後に出力する値をカンマで区切って続けます。例:
SELECT node_id, MAX(us_links.conduit_width), MIN(us_links.conduit_width)
グリッドまたは CSV ファイル内の列に付けられたタイトルは、キーワード AS を使用して上書きすることができます。例:
SELECT node_id AS title, MAX(us_links.conduit_width) AS mymax, MIN(us_links.conduit_width) AS mymin
タイトルを囲む引用符は使用しても使用しなくてもかまいません。引用符を使用しない場合、スペースは使用できず、英数字以外の文字も使用できません。例:
SELECT node_id AS title, MAX(us_links.conduit_width) AS mymax, MIN(us_links.conduit_width) AS '£% my min'
FROM キーワードを使用すると、テーブルを上書きすることができます。例:
SELECT node_id AS title, MAX(us_links.conduit_width) AS mymax, MIN(us_links.conduit_width) AS mymin FROM node
結果は、INTO FILE キーワードを使用してファイルが指定されていない限り、グリッドに表示されます。例:
SELECT node_id AS title, MAX(us_links.conduit_width) AS mymax, MIN(us_links.conduit_width) AS mymin FROM node INTO FILE 'c:\temp\mynodes.csv'
WHERE キーワードを使用すると、レポート対象のオブジェクトをフィルタすることができます。例:
SELECT node_id AS title, MAX(us_links.conduit_width) AS mymax, MIN(us_links.conduit_width) AS mymin FROM node WHERE MAX(us_links.conduit_width) > 450
GROUP BY キーワードを使用すると、オブジェクトのグループに集約された結果を計算することができます。例:
SELECT MAX(MAX(us_links.conduit_width)) GROUP BY system_type
HAVING キーワードを使用すると、レポートされる集計結果を制限することができます。例:
SELECT MAX(MAX(us_links.conduit_width)) GROUP BY system_type HAVING MAX(MAX(us_links.conduit_width)) < 1000
次の表は、このAutodesk製品でサポートされている SQL 構文の一覧です。追加の注意事項がその後にあります。
SQL の使用方法とサポートされているすべての関数についての包括的な情報については、「InfoWorks WS Pro の SQL」テクニカル ペーパーを参照してください。
コメント テキストは、クエリーの実行時には無視されます。コメントは、行単位(コメント構文の後の行全体がコメント テキストとして扱われる)またはブロック単位(ブロックは行の一部として指定され、複数行にまたがる)で指定できます。コメント テキストは、SQL ダイアログ内で構文的に緑色でハイライト表示されます。
| 構文 | 説明 |
|---|---|
| // | 行コメント |
| /* | ブロック コメント: コメント テキスト ブロックの開始 |
| */ | ブロック コメント: コメント テキスト ブロックの終了 |
| 構文 | 説明 |
|---|---|
|
INT(数値) |
数値の整数部。 |
|
FLOOR(数値) |
パラメータ以下で最も近い整数。 |
|
CEIL(数値) |
パラメータ以上で最も近い整数。 |
| FIXED(変換する数値、小数点以下の桁数) | 数値と 0 から 8 までの小数点以下の桁数を受け取り、小数点以下を必要に応じて切り上げまたは切り下げしてその桁数に丸め、数値を文字列に変換します。小数点以下の桁数が 0 の場合、文字列には小数点はありません。 |
|
ABS(x) |
次の絶対値を取ります: x。 例: 関数は次を返します: x 次の場合: x >= 0、 -x それ以外の場合 |
|
LEFT(s,n) |
1 つめを返します n 文字列の文字 s、または文字列全体 n は文字列の長さよりも大きいです |
|
RIGHT(s,n) |
最後を返します n 文字列の文字 s、または文字列全体 n は文字列の長さよりも大きいです |
|
MID(s,n,m) |
文字列の部分文字列を返します s に次の値を含む m 位置から始まる文字 n、開始位置は 1 からカウント |
|
LEN(s) |
文字列の長さを返します s |
|
IIF(x,y,z) |
式 x が true の場合は、 yを返し、それ以外の場合は、 z |
| NVL(x,y) | If x が NULL の場合は、 yを返し、それ以外の場合は、 x |
|
SUBST(s1,s2,s3) |
文字列の最初のインスタンスを置き換えます s2 文字列内に s1 次の文字列を持つ s3。 例: SUBST(node_id,'01','ND') ノード ID「01880132」に適用されると、「ND880132」を返します。 |
|
GSUBST(s1,s2,s3) |
文字列のすべてのインスタンスを置き換えます s2 文字列内に s1 次の文字列を持つ s3。 例: GSUBST(node_id,'01','ND') ノード ID「01880132」に適用されると、「ND88ND32」を返します |
|
GENSUBST(s,regexp,format) |
文字列を置換 s 定義されている書式とともに、正規表現の場合 regxp 文字列に一致 s、それ以外の場合は文字列を返します s 変化なし。 例: GENSUBST(node_id,'(01)(..)(..)(.*)','ND\2\4a\1') ノード「01880132」に適用されると、「ND8832a01」を返します 注:
ヒント: 正規表現は強力であり、ここで示した例よりもはるかに多くのことができます。正規表現とその構文の詳細については、Wikipedia のこの記事を参照してください。
|
| NL() |
改行文字を返します。 たとえば、3 行のノート フィールドを設定するには SET notes = 'Set' + NL() + 'new' + NL() + 'line' |
|
YEARPART(s) |
YEARPART は、日付の年に適用され、その年を返します。日付が 24/09/2024 の場合(DD/MM/YYYY 形式を仮定)、YEARPART は 2024 になります。 注: YEARPART、MONTHPART、および DAYPART 関数は、日付として書式設定された日付フィールドと文字列フィールドで動作します。適用される文字列が日付でない場合は、0 が返されます。
|
|
MONTHPART(s) |
MONTHPART は、日付の月に適用され、その月を返します。上記の例を取り上げると、MONTHPART は 09 です。 注: YEARPART、MONTHPART、および DAYPART 関数は、日付として書式設定された日付フィールドと文字列フィールドで動作します。適用される文字列が日付でない場合は、0 が返されます。
|
|
DAYPART(s) |
DAYPART は、日付の日に適用され、その日を返します。上記の例では、DAYPART は 24 です。 注: YEARPART、MONTHPART、および DAYPART 関数は、日付として書式設定された日付フィールドと文字列フィールドで動作します。適用される文字列が日付でない場合は、0 が返されます。
|
|
NOW() |
現在を定義する、パラメータのない関数。この関数はコンピュータの現在の日付と時刻を調べるため、NOW を使用した SQL クエリーを実行するたびに毎回最新の状態に書き換える必要はありません。 |
|
DATEPART(日付) |
DATEPART は、日付の日部分を返します(たとえば、日付から分を削除します)。 |
|
TIMEPART(日付) |
TIMEPART は、日付の時刻部分を午前 0 時からの分数として返します。 |
|
YEARSDIFF(開始日,終了日) |
YEARSDIFF は、2 つの日付の間の満年数を返します。 注: YEARSDIFF、MONTHSDIFF、および DAYSDIFF 関数は、該当する日付の分部分を無視します。
|
|
MONTHSDIFF(開始日,終了日) |
MONTHSDIFF は、2 つの日付の間の満月数を返します。 注: YEARSDIFF、MONTHSDIFF、および DAYSDIFF 関数は、該当する日付の分部分を無視します。
|
|
DAYSDIFF(開始日,終了日) |
DAYSDIFF は、2 つの日付の間の満日数を返します。 注: YEARSDIFF、MONTHSDIFF、および DAYSDIFF 関数は、該当する日付の分部分を無視します。
|
|
INYEAR(日付, 数値) |
INYEAR は、数値として受け取った年に日付が含まれる場合は true を返します。 注: INYEAR、INMONTH、INYEARS、INMONTHS 関数のパラメータのいずれかが数値でない場合、関数は false を返します。数値が整数でない場合、数値は最も近い整数に丸められます。
|
|
INMONTH(日付,月,年) |
INMONTH は、数値として受け取った年と月に日付が含まれる場合は true を返します。 注: INYEAR、INMONTH、INYEARS、INMONTHS 関数のパラメータのいずれかが数値でない場合、関数は false を返します。数値が整数でない場合、数値は最も近い整数に丸められます。
|
|
INYEARS(日付,開始年,終了年) |
INYEARS は、日付が開始年から終了年までの間にある場合は true を返します(開始年と終了年はその年を含む)。 注: INYEAR、INMONTH、INYEARS、INMONTHS 関数のパラメータのいずれかが数値でない場合、関数は false を返します。数値が整数でない場合、数値は最も近い整数に丸められます。
|
|
INMONTHS(日付,開始月,開始年,終了月,終了年) |
INMONTHS は、日付が開始年の開始月から終了年の終了月までの間に含まれる場合は true を返します。 注: INYEAR、INMONTH、INYEARS、INMONTHS 関数のパラメータのいずれかが数値でない場合、関数は false を返します。数値が整数でない場合、数値は最も近い整数に丸められます。
|
|
ISDATE(推定される日付) |
フィールドがデータベースから取得された日付の場合は true を返し、文字列の場合はそれが日付に変換できる場合は true を返し、それ以外の場合は false を返します。 |
|
MONTHYEARPART(日付) |
MONTHYEARPART は、文字列「<月>/<年>」を返します。 |
|
YEARMONTHPART(日付) |
YEARMONTHPART は、文字列「<年>/<日>」を返します。 |
|
MONTHNAME(日付) |
MONTHNAME は、(現在のロケールでの)月の名前を返します。 |
|
SHORTMONTHAME(日付) |
SHORTMONTHNAME は、月の省略名を返します(ロケールと Windows による省略形によって決定されます)。 |
|
DAYNAME(日付) |
DAYNAME は、(現在のロケールでの)曜日の名前を返します。 |
|
SHORTDAYNAME(日付) |
SHORTDAYNAME は、曜日の省略名を返します(ロケールと Windows による省略形によって決定されます)。 |
| NUMTOMONTHNAME(n) | 1 から 12 までの整数を受け取り、月の名前を返します。 |
| NUMTOSHORTMONTHNAME(n) | 1 から 12 までの整数を受け取り、月の名前の短縮形(JAN など)を返します。 |
| TODATE(年,月,日) | 年、月、日を整数として受け取り、日付を返します。 |
| TODATETIME(年,月,日,時,分) | 年、月、日を整数として受け取り、日付を返します。 |
これらの関数の目的は、値を範囲に分割したり、値をスコア付けしたり、値をリストにマップすることです。
| 構文 | 説明 |
|---|---|
|
AREF(n,list) |
AREF にリスト変数を指定 list 1 から長さまでの数値 list、次を返します nth 要素内の要素。 |
|
LEN(リスト変数) |
LEN は、リスト変数内のアイテム数を返します。 |
|
RINDEX(式, リスト変数) |
RINDEX は、リストがソートされている場合にのみ使用できる関数です。RINDEX 関数の目的は、基本的に値を「バケット」に分割することです。 |
|
LOOKUP(式, リスト変数) |
ある場合 n リスト内の項目と式の値は 1 から n を含む、LOOKUP は、リストから適切な項目を返します。 |
|
MEMBER(式, リスト変数) |
MEMBER は、式の値がリスト内のいずれかの値である場合は true を返し、そうでない場合は false を返します。 |
|
INDEX(式, リスト変数) |
式の結果がリストの最初の値の場合、INDEX は 1 を返し、2 番目の値の場合は 2 を返し、式の結果がリストでない場合は 1 を返します。 |
|
TITLE(n,list) |
TITLE は、RINDEX を使用して値を複数の範囲に分割している場合に、「バケット」のタイトルを指定します。 |
| 構文 | 説明 |
|---|---|
|
LOG(x) |
対数(底 10)を計算します x。 |
|
LOGE(x) |
対数(底 e)を計算します x。 |
|
EXP(x) |
ex を計算します。 |
|
SIN(x) |
正弦を計算します x。 |
|
COS(x) |
余弦を計算します x。 |
|
TAN(x) |
正接を計算します x。 |
|
ASIN(x) |
逆正弦を計算します x。 |
|
ACOS(x) |
逆余弦を計算します x。 |
|
ATAN(x) |
逆正接を計算します x。 |
|
ATAN2(x,y) |
逆正接を計算します x / y 兆候を使用して x と y 四半円点を決定します。 |
|
GAMMALN(x) |
ガンマ関数の対数(底 e)を返します x。 |
集計関数は、以下に基づいて値を計算できるようにするために使用されます。
| 構文 | 説明 |
|---|---|
|
ANY(条件式) |
ANY は、配列フィールドのいずれかの行に対して式が true の場合に true を返します。例: ANY(details.code=’JDS’) これは、details 配列フィールドのいずれかの行にコード JDS がある場合は true、それ以外の場合は false を返します。 注: 括弧内の式には、複数の配列フィールド、オブジェクトの他のフィールド、定数、および非集計関数を含めることができ、これらはすべて算術演算子、比較演算子、および論理演算子と組み合わせることができます。
|
|
ALL(条件式) |
ALL は、すべての行/関連オブジェクト/タイムステップに対して式が true の場合に true を返します。 |
|
COUNT(条件式) |
COUNT は、式が true である行/関連オブジェクト/タイムステップの数をカウントします。 |
|
MAX(条件式) |
MAX は、すべての行/関連オブジェクト/タイムステップの最大値(数値、日付、または文字列)を返します。 注: MAX と MIN はどちらも数値、日付、文字列フィールドで動作します。文字列フィールドの場合、文字列間の比較は、インストールされている Windows で設定されている言語に基づいて実行されます。
|
|
MIN(条件式) |
MIN は、すべての行/関連オブジェクト/タイムステップの最小値(数値、日付、または文字列)を返します。 注: MAX と MIN はどちらも数値、日付、文字列フィールドで動作します。文字列フィールドの場合、文字列間の比較は、インストールされている Windows で設定されている言語に基づいて実行されます。
|
|
AVG(条件式) |
AVG は、すべての行/関連オブジェクト/タイムステップについて、式(数値のみ)のすべての非 null 値の平均を返します。 |
|
FIRST(条件式) |
FIRST は、最初の行/関連オブジェクト/タイムステップの式の値を返します。 |
|
LAST(条件式) |
LAST は、最後の行/関連オブジェクト/タイムステップの式の値を返します。したがって、値を計算する際には、配列フィールド内のレコードの 1 つが考慮されます。 |
| 構文 | 説明 |
|---|---|
|
+ |
これらの演算子はすべて、数値に指定した処理を行います。
<> は、文脈によって「等しくない」または「同じではない」という意味です。
また、+ を使用して文字列を連結することもできます。+ は、文字列に対して特別な意味を持つ唯一の算術演算子です。 |
|
- |
|
|
* |
|
|
/ |
|
|
= |
|
|
< |
|
|
<= |
|
|
> |
|
|
>= |
|
|
<> |
|
|
^ |
^ 演算子は「累乗する」という意味です。たとえば、x^2 は x の 2 乗を意味します。 |
|
% |
% 演算子は「剰余」を意味するため、a % b は a / b の余りを返します。たとえば、year % 10 は年の最後の桁になります。 |
| 構文 | 説明 |
|---|---|
|
AND |
示されるとおりです |
|
OR |
|
|
NOT |
| 構文 | 説明 |
|---|---|
|
IS NULL |
フィールドが NULL の場合に true と評価されます |
|
IS NOT NULL |
フィールドが NULL でない場合に true と評価されます |
|
LIKE |
LIKE で使用できる 2 つの特殊文字は次のとおりです。
文字列内の他のすべての文字は、その文字そのものにのみ一致します。 一致の仕組みは DOS と同様です。
DOS と同様に、* はすべての項目が一致します。したがって、LIKE '*AB' で最後に AB がある項目を見つけようとしたり、LIKE '*AB*' で文字列の任意の位置に AB がある項目を見つけたりすることはできません。 この LIKE の動作は、Microsoft Access の動作とは異なります。 |
|
MATCHES |
MATCHES では、正規表現を使用して、LIKE 演算子よりも複雑な検索を実行できます。 重要な構文要素は次のとおりです。
一致の仕組みは次のとおりです。
正規表現は強力であり、上記の基本例よりもはるかに多くのことができます。正規表現とその構文の詳細については、Wikipedia のこの記事を参照してください。 |
| 構文 | 説明 |
|---|---|
|
TRUE |
示されるとおりです |
|
FALSE |
|
|
NULL |
sim の代わりに tsr を使用すると、1 つのスナップショットだけでなく、すべてのシミュレーション結果に対して集計関数を使用することができます。
| 構文 | 説明 |
|---|---|
|
DURATION(条件式) |
式が true である時間(分単位)(結果のみ)。例: DURATION(tsr.pressure < x) これは、ノードの圧力が次の値を下回る累積時間(分単位)を返します: x。 |
|
INTEGRAL(条件式) |
各タイムステップの式の値とタイムステップの長さ(分単位)を掛け合わせた値の合計(結果のみ)。例: INTEGRAL(tsr.flow*60) これは、L/S がフロー単位として使用されていると仮定して、パイプを流れる水の総量(リットル単位)を返します。 |
|
WHENEARLIEST(条件式) |
式が true になる最も早い時間(結果のみ)。例: WHENEARLIEST(tsr.pressure < x) これは、ノードの圧力が次の値を下回るのが最も早いタイムステップの日時を返します: x。 |
|
WHENLATEST(条件式) |
式が true である最新の時刻(結果のみ)。例: WHENLATEST(tsr.pressure < x) これは、ノードの圧力が次の値を下回る最後のタイムステップの日時を返します: x。 |
|
EARLIEST(条件式) |
式の最初の非 null 値(結果のみ)。これは、IIF 関数と組み合わせて使用された場合にのみ、意味のある答えが得られる可能性があります。例: EARLIEST(IIF(tsr.pressure < x, tsr.pressure, NULL)) これは、ノードの圧力が次の値を下回るのが最も早いタイムステップにおけるノードの圧力を返します: x。 |
|
LATEST(条件式) |
式の最後の非 null 値(結果のみ)。これは、IIF 関数と組み合わせて使用された場合にのみ、意味のある答えが得られる可能性があります。例: LATEST(IIF(tsr.pressure < x, tsr.pressure, NULL)) これは、ノードの圧力が次の値を下回る最新のタイムステップにおけるノードの圧力を返します: x。 |
|
WHENMAX(条件式) |
式が最大になる時間(結果のみ)。例: WHENMAX(tsr.pressure) これは、ノードが記録された最大圧力に達した日時を返します。 |
|
WHENMIN(条件式) |
式が最小になる時間(結果のみ)。例: WHENMIN(tsr.pressure) これは、ノードが記録された最小圧力に達した日時を返します。 |
SET user_number_1 = x > 390000は、x > 390000 の項目では user_number_1 を 1 に、その他の項目では 0 に設定します。これは、条件式が true の場合は 1、false の場合は 0 と評価されるためです。
SET user_text_1 = zは、user_text_1 を z 値に設定します。この操作を行うと、文字列から不要な小数点と小数点以下の桁が切り捨てられます。これは、これらの文字列を受け取り、必要に応じて他の項目を最後に連結できるようにするためです。
SET user_number_1 = user_text_1は、文字列が有効な数値の場合に値を割り当てます。
SQL エンジンは、等価性を少し異なる方法で処理します。x = NULL および x <> NULL は、それぞれ X IS NULL および X IS NOT NULL と同じです。
asset_id IS NULL
asset_id = ""
LEN(asset_id)=0
たとえば、次の代わりに、
SET 2d_pt_id = subcatchment_id次を使用できます。
SET [2d_pt_id] = subcatchment_id