ArcGIS Online の標準化された SQL 関数

ArcGIS Online は、ホスト フィーチャ レイヤーを検索する際に、標準化された SQL クエリを使用するように開発者に要求します。これを使用すると、開発者にとってもアプリを操作する場合でも、ホスト フィーチャ レイヤーのクエリが容易になり、SQL インジェクション攻撃を防ぐことができます。すべての ArcGIS アプリケーションは、標準の SQL クエリを自動的にサポートします。

標準化されたクエリの制限

  • 標準化されたクエリは、組織サイト全体に適用されます。一部のレイヤーに対して無効に設定することはできません。
  • 標準化されたクエリは、異なるワークスペース間の結合ではサポートされていません。
  • サブクエリを WHERE 句として使用することはできません (例: POP_2010 = (SELECT min(POP_2010) FROM counties)。
  • Microsoft Azure SQL Database などのデータベース サービスからのクエリもサポートされていません。

ArcGIS Online でサポートされている SQL 関数

データベース固有の WHERE 句構文を現在使用しているアプリ開発者は、アプリのコード内にある WHERE 句を更新して、ArcGIS Online でサポートされている一般的な SQL 構文を使用する必要があります。サポートされている SQL 関数と各関数の構文を次の表に示します。アプリ内で次の関数と構文が使用されている場合、ArcGIS Online では、フィーチャ レイヤーで使用されているデータベースの仕様に合わせてこれらの関数と構文が変換されます。

日付関数

機能説明

CURRENT_DATE()

現在の日付を UTC 時間で返します。

クライアントに表示される内容は、使用しているクライアントによって異なります。 ArcGIS Online の日付は、組織またはプロフィールのタイム ゾーンで表示されます。

CURRENT_TIME()

現在の UTC の日付と時刻 (時間、分、秒) を返します。

クライアントに表示される内容は、使用しているクライアントによって異なります。 ArcGIS Online の時刻は、組織またはプロフィールの現地時間で表示されます。

CURRENT_TIMESTAMP()

現在の UTC の日付と時刻 (時間、分、秒、ミリ秒) を返します。

クライアントに表示される内容は、使用しているクライアントによって異なります。 ArcGIS Online の時刻は、組織またはプロフィールの現地時間で表示されます。

EXTRACT(<unit> FROM <date>)

指定した <date> の一部 (<unit>) を返します。 可能な <unit> 値には、年、月、日、時間、分が含まれます (これらに限定されません)。

  • EXTRACT(MONTH FROM 12/21/2016) - 12 を返します。
  • EXTRACT(DAY FROM 12/21/2016 12:00) - 21 を返します。
  • EXTRACT(HOUR FROM 12/21/2016 15:00) - 15 を返します。

数値関数

機能説明

ABS(<number>)

指定した数値の絶対値 (正の値) を返します。

CEILING(<number>)

指定した数値以上で、最も小さな整数を返します。

  • CEILING(12.93) - 結果は 13 です。

COS(<number>)

<number> の角度の余弦を返します。角度の単位はラジアンです。

CAST(<number> AS FLOAT | INT)

数値を別のタイプに変換します。 FLOAT は指定した number を double に変換し、INT は整数に変換します。

FLOOR(<number>)

指定した number 以下の最も大きい整数を返します。

  • FLOOR(12.93) - 結果は 12 です。

LOG(<number>)

指定した number の自然対数。

LOG10(<number>)

指定した number の常用対数です。

MOD(<number>, <n>)

被除数 (<number>) を除数 <n> で除算したときの余りを返します。 <n> と <number> のタイプは、整数である必要があります。

次のようなケースがあります。

  • MOD(10, 4) - 結果は 2 です。
  • MOD(CAST(DBLFIELD AS INT), 4) - DBLFIELD はタイプが double のフィールドであるため、値を double から整数に変換するために CAST 関数が必要です。

NULLIF(<number>, <value>)

指定した number が指定した値と同じ場合、null を返します。 NULLIF は、<value> を 0 に設定してゼロ除算エラーを防ぐためによく使用されます。

引数のフィールド値が null であった場合、計算結果は null です。

たとえば、TOTALPOPPOP18 で除算する double フィールドを計算する必要があるとします。 フィーチャにゼロである POP18 値が含まれている場合に、この計算を実行すると、ゼロ除算エラーが発生します。 この場合、POP18 がゼロであるレコードを非表示にするフィルターを作成して、計算を実行できます。 この場合、NULLIF を使用すると簡単です。

  • TOTALPOP / NULLIF(POP18, 0) - POP18 がゼロと等しい場合は null を返し、それ以外の場合は TOTALPOP / POP18 の値を返します。

POWER(<number> , <y>)

指定した number を指定した乗数 (<y>) で累乗した値を返します。

ROUND(<number> , <length>)

指定する number を指定した長さに丸めます。

<length> に正の数を使用する場合、数値は <length> で指定された小数点以下の桁数に丸められます。 <length> が負の数の場合、指定した <number> は小数点の左側が丸められます。

  • ROUND(10.9934,2) - 10.99 を返します。
  • ROUND(10.9964,2) - 11.00 を返します。
  • ROUND(111.0,-2) - 100.00 を返します。

SIN(<number>)

指定した <number> の角度の正弦を返します。角度の単位はラジアンです。

TAN(<number>)

指定した <number> の角度の正接を返します。角度の単位はラジアンです。

TRUNCATE(<number>,<decimal_place>)

指定した <decimal_place><number> を切り捨てます。

<decimal_place> が正の場合、指定した小数点以下の桁数に切り捨てられます。 <decimal_place> が負の数の場合、<number> は小数点の左側が丸められます。

  • TRUNCATE(111.996,2) - 111.99 を返します。
  • TRUNCATE(111.996,-2) - 100.00 を返します。

文字列関数

機能説明

CHAR_LENGTH(<string>)

指定した string の文字数を返します。 結果は整数です。

  • CHAR_LENGTH('Redlands') - 結果は 8 です。

CONCAT(<string1>, <string2>)

2 つの文字列値を連結します

指定できるのは、2 つの文字列だけです。 3 つ以上の文字列を連結するには、次のように CONCAT 関数を連続して使用してネストします。

  • CONCAT('A', 'B') - 結果は 'AB' です。
  • CONCAT('A', CONCAT(':', 'B')) - 結果は 'A:B' です。

NULL 値は空の文字列に変換されます。

POSITION(<substring>, <string>)

指定する string 内で指定した substring が最初に現れる位置を返します。 指定した substring が見つからない場合、結果は 0 になります。

  • POSITION('boat', 'Sailboat') - 結果は 5 です。
  • POSITION('motor', 'Sailboat') - 結果は 0 です。

SUBSTRING(<string>, <start>, <length>)

string の値の一部を返します。<start> は、返される文字列の開始位置を指定する整数インデックスであり、<length> は返される文字数です。

  • SUBSTRING('Sailboat', 5, 4) - 結果は 'boat' です。
  • SUBSTRING('Sailboat', 1, 4) - 結果は 'Sail' です。
  • SUBSTRING('Sailboat', 5, 100) - 結果は 'boat' です。

TRIM(BOTH | LEADING | TRAILING ' ' FROM <string>)

指定する string の先頭または末尾にあるすべての空白を削除した文字列を返します。

  • TRIM(BOTH ' ' FROM ' San Bernardino ') - 結果は 'San Bernardino' です。

2 つ目の引数は、1 つの空白を囲んだ 2 つの単一引用符である点に注意してください。

UPPER(<string>)

すべての文字を大文字に変換した文字列を返します。

  • UPPER('Sailboat') - 結果は 'SAILBOAT' です。

LOWER(<string>)

すべての文字を小文字に変換した文字列を返します。

  • LOWER('Sailboat') - 結果は 'sailboat' です。