SQL (Structured Query Language) は、データベースやその他のデータ処理技術へのアクセスとデータ管理を行うために定義された構文と式を含む、標準的なコンピューター言語です。
ANSI (American National Standards Institute) では、SQL の標準を定義しています。 ほとんどのリレーショナル データベース管理システム (RDBMS) はその標準を取り入れて拡張しているため、SQL 構文は RDBMS ごとに少しずつ異なります。
ArcGIS のクエリ式は、標準的な SQL 式に準じています。 式で使用する SQL 構文は、データ ソースによって異なります。 各データ ソースには、以下に示すとおり独自の SQL 言語があります。これを SQL 方言と呼びます。
- 標準化されたクエリを使用するファイル ジオデータベース、シェープファイル、メモリ内テーブル ビュー、.dbf、.csv、.txt、.xlsx などのテキスト ファイル、テーブル、およびフィーチャ サービスといったファイルベースのデータは、SQL ケーパビリティのサブセットをサポートする ArcGIS SQL 方言を使用します。
- モバイル ジオデータベース、ST_geometry SQLite、Open Geospatial Consortium (OGC) GeoPackage、および Microsoft Excel は SQLite SQL 方言を使用します。
- データベースとエンタープライズ ジオデータベースは、Oracle、Microsoft SQL Server、PostgreSQL、SAP HANA、IBM Db2 など、基になる RDBMS の SQL 構文を使用します。各データベースは、少しずつ異なる独自の SQL 方言を使用します。
ArcGIS ダイアログ ボックスを使用して SQL 式を構築する場合、オートコンプリートを使用すると、クエリ先のデータ ソースに対して正しい構文を適用しやすくなります。 入力するとプロンプトが開き、データ ソースがサポートするフィールド名、値、キーワード、演算子が表示されます。
ヒント:
SQL 式を作成するときに ArcGIS SQL 構文を使用するケースと、基になる RDBMS の SQL 構文を使用するケースを判断するには、次の点を確認します。
- SQL 式のデータがさまざまなデータ ソース位置から取得される場合は、次のようになります。
- データ ソースがファイルベースと RDBMS の両方から派生している場合は、ArcGIS SQL 構文を使用します。
- SQL 式のすべてのデータが同じデータ ソース位置から派生している場合は、次のようになります。
- データ ソースがファイルベースのデータである場合は、ArcGIS SQL 構文が使用されます。
- データ ソースがデータベースまたはエンタープライズ ジオデータベースである場合は、ArcGIS は SQL 式を RDBMS に渡して解決します。サポートされる具体的な式の構文とデータ タイプについては、データベース管理システムのマニュアルをご確認ください。
ArcGIS AllSource では、SQL 式のダイアログ ボックスは次の場所にあります。
- [属性検索 (Select Layer By Attribute)] ジオプロセシング ツールを使用して属性で選択します。
- [レイヤー プロパティ] ダイアログ ボックスの定義クエリ タブ。
- [シンボル] ウィンドウの表示フィルター タブ。
- 新しいレポートの作成ウィンドウでレポートを作成します。
- [テーブルのエクスポート (Export Table)] ジオプロセシング ツールを使用してテーブルをエクスポートします。
- [フィーチャのエクスポート (Export Features)] ジオプロセシング ツールを使用して、フィーチャをエクスポートします。
- [フィールド演算 (Calculate Field)] ジオプロセシング ツールを使用し、フィールド値に対する単純な計算または複雑な計算を行う式を作成します。
- [選択 (Select)] を使用し、以降の解析のデータをクエリします。
- [クエリ テーブルの作成 (Make Query Table)] ジオプロセシング ツールを使用し、レイヤーまたはテーブル ビューを作成します。
- [フィーチャ レイヤーの作成 (Make Feature Layer)] ジオプロセシング ツールを使用し、フィーチャ レイヤーを作成します。
- [データベース ビューの作成 (Create Databese View)] ジオプロセシング ツールを使用し、データベースまたはジオデータベースにビューを作成します。
- [アペンド (Append)] ジオプロセシング ツールを使用し、ターゲット データセットに複数の入力データセットをアペンドします。
- ProSDK Core.Data.QueryDef を使用します。
SQL 式の構文
SQL 式には、1 つまたは複数の値、演算子、および SQL 関数の組み合わせが含まれており、これらを使用して ArcGIS でフィーチャのサブセットやテーブル レコードをクエリまたは選択できます。
すべての SQL クエリは、SELECT キーワードで表現されます。
SELECT * FROM は SQL 式の前半部分で、ほとんどの ArcGIS ダイアログ ボックスで自動的に入力されています。 たとえば、SQL 構文を記述してクエリを構築する場合、SELECT ステートメントを使用してレイヤーやテーブルからフィールドが選択されます。
SQL 式の SELECT * FROM <Layer_name> 以降の部分は、WHERE 句です。 WHERE 句は、特定の条件に一致するレコードを取得するために使用され、構築される式の一部となります。
ヒント:
SQL 式のアスタリスク (*) は、すべての列を指定するために使用されます。
次に、基本的な SQL 式の WHERE 句を示します。
- <Field_name> <Operator> <Value or String>
例: STATE_NAME = 'Florida' この式には 1 つの句が含まれており、STATE_NAME フィールドに「Florida」が含まれるすべてのフィーチャを選択します。
複合的な式では、次の形が使用されます。
- <Field_name> <Operator> <Value or String> <Connector> <Field_name> <Operator> <Value or String> ...
例: STATE_NAME = 'Florida' OR (STATE_NAME = 'South Carolina' AND POP2010 > 15000) 複合式は論理演算子 (AND または OR) で結合される複数の句で構成されており、STATE_NAME フィールドに「Florida」を含むすべてのフィーチャと、STATE_NAME フィールドに「South Carolina」を含み、かつ POP2010 フィールドの値が 15,000 よりも大きいすべてのフィーチャを選択します。
ヒント:
複合式では必要に応じて丸括弧 () を使用し、演算順序を指定できます。
列全体を選択しているため、対応するテーブルから一部の列だけを返すよう SELECT ステートメントを制限することはできません。これは、SELECT * 構文がハードコードされているからです。 このような理由から、DISTINCT、ORDER BY、GROUP BY などのキーワードは、サブクエリを除く ArcGIS の SQL 式では使用できません。 詳細については、以下の「サブクエリ」セクションをご参照ください。
以下のセクションでは、ArcGIS で使用される一般的な SQL クエリ式のエレメントについて説明します。
一般的なクエリ: 文字列の検索
クエリ内の文字列は、次の例のように、必ず単一引用符で囲む必要があります。
STATE_NAME = 'California'
Microsoft SQL Server 内のジオデータベースに対して実行する場合を除き、式内の文字列の大文字と小文字は区別されます。 大文字と小文字を区別しない他のデータ ソースで検索するには、SQL 関数を使用して、すべての値を大文字または小文字に変換する方法があります。 ファイル ジオデータベースやシェープファイルなどのファイルベースのデータ ソースの場合、UPPER 関数または LOWER 関数を使用して選択する大文字または小文字を設定できます。 たとえば、次の式は、名前が Rhode Island または RHODE ISLAND として格納されている州を選択します。
UPPER(STATE_NAME) = 'RHODE ISLAND'
部分文字列検索を行うには、LIKE 演算子の代わりに = 演算子を使用します。 たとえば、次の式は、アメリカの州の中から Mississippi と Missouri を選択します。
STATE_NAME LIKE 'Miss%'
複数の値を指定するには、IN 演算子を使用します。 たとえば、California、New York、Colorado のすべての値を選択します。
STATE_NAME IN ('California', 'New York', 'Colorado')
文字列に単一引用符が含まれている場合は、次の例のように、エスケープ文字として単一引用符を前に追加する必要があります。
NAME = 'Alfie''s Trough'
OWNER_NAME IN ('Joseph D''Souza', 'Katherine Smith', 'Tim O''Brien')
パーセント記号 (%) は、その位置で、1 文字、100 文字、または 0 文字など、任意数の文字が許可されることを意味します。 また、1 文字を表すワイルドカードを検索に使用したい場合は、アンダースコア (_) を使用します。 たとえば、次の式は Catherine Smith と Katherine Smith を検索します。
OWNER_NAME LIKE '_atherine Smith'
文字列値をソート順序に基づいて選択する場合は、大なり (>)、小なり (<)、以上 (>=)、以下 (<=)、不等号 (<>)、BETWEEN の各演算子を使用することができます。 たとえば、次の式では、M から Z までの文字で始まる名前を持つカバレッジ内のすべての都市を選択します。
CITY_NAME >= 'M'
文字列関数は、文字列の書式設定に使用することができます。 たとえば、LEFT 関数は、文字列の左側から指定された文字数の位置にある文字を返します。 次のクエリは、文字 A で始まるすべての州を返します。
LEFT(STATE_NAME,1) = 'A'
サポートされる関数のリストについては、RDBMS のマニュアルをご参照ください。
一般的な式: NULL 値の検索
NULL キーワードを使用して、指定したフィールドに NULL 値が設定されたフィーチャおよびレコードを選択することができます。 NULL キーワードの前には、必ず IS または IS NOT が付きます。 たとえば、1996 年の人口が未入力になっている都市を見つけるには、次のようなクエリを使用することができます。
POPULATION IS NULL
または、1996 年の人口が入力されている都市を見つけるには、次のようなクエリを使用することができます。
POPULATION96 IS NOT NULL
ジオメトリ フィールドが選択されている場合は、NULL キーワードおよび NOT NULL キーワードのみを検索できます。
一般的な式: 数値の検索
ピリオド (.) は、ロケールや地域のオプションの設定にかかわらず、常に小数点として使用されます。 式では、小数点または千単位の区切り文字としてカンマ (,) を使用することはできません。
数値の検索には、次の例に示すように、等号 (=)、不等号 (<>)、より大きい (>)、より小さい (<)、以上 (>=)、以下 (<=)、BETWEEN の各演算子を使用することができます。
POPULATION >= 5000
数値関数は、数値の書式設定に使用することができます。 たとえば、ROUND 関数は、ファイル ジオデータベース内の数値を特定の桁数に丸めます。
ROUND(SQKM,0) = 500
サポートされる数値関数のリストについては、RDBMS のマニュアルをご参照ください。
日時
一般的なルールとよく使用される式
ジオデータベースのデータ ソースは、日付を Date フィールドに格納します。 ただし、シェープファイルは日付を Date フィールドに格納しません。 したがって、以下に示すクエリ構文のほとんどに、時間への参照が含まれます。 フィールドに日付だけが含まれていることがわかっていて、クエリの時間部分を省略しても安全な場合もあれば、時間を含めないとクエリから構文エラーが返される場合もあります。
日付フィールドを検索する場合、Date フィールドのタイプとデータ ソースで必要とされる構文に注意する必要があります。 検索条件設定の項目モードで日付クエリを作成した場合は、正しい構文が自動的に生成されます。 次のクエリの例では、ファイル ジオデータベース データ ソースの Date フィールドに 2011 年 1 月 1 日以降のすべてのレコードが返されます。
INCIDENT_DATE >= timestamp '2011-01-01 00:00:00'
注意:
ArcGIS AllSource では、100 CE より前の日付の値を挿入または表示できません。 時間を格納する日付タイプを使用している場合、00:00:00 の時間は午前 12 時 (真夜中) と同じです。
日付とともに NULL 以外の時間が保存されていると (例: January 12, 1999, 04:00:00)、日付の検索でもレコードは返されません。 日時フィールドに日付だけを渡すと、日時フィールドの時間に 0 が設定され、時間が 12:00:00 AM であるレコードのみが取得されます。
属性テーブルでは、データベースの形式ではなく、地域の設定に基づいたわかりやすい形式で日時が表示されます。 これには欠点がいくつかあります。
- SQL クエリで示す文字列は、特に時間が含まれる場合に、属性テーブルで表示される文字列値に少し似ている場合があります。 たとえば、地域の設定が米国である場合、時間を 00:00:15 と入力すると、属性テーブルには 12:00:15 AM と表示されますが、対応するクエリ構文は Datefield= '1899-12-30 00:00:15' になります。
- 属性テーブルは、編集内容を保存するまでデータ ソースを認識しません。 属性テーブルは、まず独自の書式に合わせて入力された値の書式設定を試み、編集内容の保存時に、データベースに合わせて結果値の調整を試みます。 このため、シェープファイルへの時間の入力は可能ですが、編集内容の保存時に時間が除外される場合があります。 この場合、フィールドには値 '1899-12-30' が含まれます。この値は、12:00:00 AM または地域の設定に応じた相当の形式で表示されます。
ジオデータベースの日時構文
ファイル ジオデータベース、モバイル ジオデータベース、およびシェープファイルの日付でサポートされている日時 SQL 構文の例を以下に示します。 一部のエンタープライズ ジオデータベースと RDBMS データ ソースでも日時 SQL 構文がサポートされていますが、これらのデータ ソースでは、必要な SQL 構文が少し異なる場合があります。
サポートされている具体的な SQL 式の構文とデータ タイプについては、データベース管理システムのドキュメントをご確認ください。
注意:
- Oracle は、日付のみ (esriFieldTypeDateOnly) フィールドと時間のみ (esriFieldTypeTimeOnly) フィールドをサポートしていません。
- PostgreSQL は、オフセット付きタイムスタンプ (esriFieldTypeTimestampOffset) フィールドをサポートしていません。
ファイル ジオデータベース
ファイル ジオデータベースの日付のみフィールドと時間のみフィールドには、それぞれ先頭に date または time という単語が付きます。 日時フィールドには、先頭に timestamp が付きます。
Datefield = timestamp 'yyyy-mm-dd'
ファイル ジオデータベースは日付フィールドで時間の使用をサポートするため、それを式に追加することができます。
Datefield = timestamp 'yyyy-mm-dd hh:mm:ss'
日付のみ、時間のみ、およびオフセット付きタイムスタンプ フィールドの場合、次の形式を使用します。
//DateOnlyField = time 'yyyy-mm-dd' DateOnlyField = time '2003-01-08' //TimeOnlyField = date 'HH24:mm:ss' TimeOnlyField = date '14:35:00' //TimestampOffsetField = timestamp 'yyyy-mm-dd HH24:mm:ss -TZH:TZM' TimestampOffsetField = timestamp '2003-01-08 14:35:00 -08:00'
モバイル ジオデータベース
特定のタイプの日付フィールドには、先頭に JULIANDAY という単語が付きます。 その他のフィールドは、関数を使用して構文的に書式設定されません。
Datefield = JULIANDAY('yyyy-mm-dd')
モバイル ジオデータベースは日付フィールドで時間の使用をサポートするため、それを式に追加することができます。
Datefield = JULIANDAY('yyyy-mm-dd HH24:mm:ss')
//TimestampOffsetField = 'yyyy-mm-dd HH24:mm:ss -TZH:TZM' TimestampOffsetField = '2003-01-08 14:35:00 -08:00' //DateOnlyField = JULIANDAY('yyyy-mm-dd') DateOnlyField = JULIANDAY('2003-01-08') //TimeOnlyField = 'HH24:mm:ss' TimeOnlyField = '14:35:00'
シェープファイル、カバレッジ、その他のファイルベースのデータ ソース
Datefield = date 'yyyy-mm-dd'
シェープファイルとカバレッジでは、日付フィールドの時間の使用はサポートされません。
既知の制限
結合の左側の部分 (最初のテーブル) での日付検索は、ジオデータベース、シェープファイル、DBF テーブルなどのファイルベースのデータ ソースでのみサポートされています。 ただし、後述するように、エンタープライズ ジオデータベース データなどのファイルベースではないデータを操作する場合は、回避方法がある可能性があります。
結合の左側の部分での日付検索は、ファイルベースのデータ ソースのために開発された制限付きバージョンの SQL を使用すると成功します。 そのようなデータ ソースを使用していない場合は、式で次の書式を強制的に使用することができます。 そのためには、クエリ式に複数の結合テーブル内のフィールドを使用します。 たとえば、フィーチャクラスとテーブル (FC1 と Table1) を結合し、どちらもエンタープライズ ジオデータベースに格納されている場合、次の式は失敗するか、データを返しません。
FC1.date = date #01/12/2001# FC1.date = date '01/12/2001'
検索を成功させるには、次のようなクエリを作成します。
FC1.date = date '01/12/2001' and Table1.OBJECTID > 0
このクエリには両方のテーブルのフィールドが使用されているため、制限付きバージョンの SQL が使用されます。 この式では、結合の作成中に一致したレコードについて Table1.OBJECTID は常に > 0 であるため、結合一致を含むすべての行がこの式の条件に一致します。
FC1.date = date '01/12/2001' を満たすレコードがすべて選択されていることを確認するには、次のクエリを使用します。
FC1.date = date '01/12/2001' and (Table1.OBJECTID IS NOT NULL OR Table1.OBJECTID IS NULL)
このクエリによって、各レコードに結合一致があるかどうかにかかわらず、FC1.date = date '01/12/2001' の条件を満たすレコードがすべて選択されます。
式の結合
AND および OR 演算子を使用して式を結合することで、複合式を作成できます。 たとえば、次の式は、敷地面積が 1500 平方メートルより広く、車 3 台分より大きい車庫を持つすべての家を選択します。
AREA > 1500 AND GARAGE > 3
OR 演算子を使用する場合は、次の例のように、OR 演算子で区切られた 2 つの式のうち少なくとも 1 つの式が、選択対象レコードに対して真である必要があります。
RAINFALL < 20 OR SLOPE > 35
式の先頭で NOT 演算子を使用すると、指定された式と一致しないフィーチャまたはレコードが検索されます。たとえば、次のように指定します。
NOT STATE_NAME = 'Colorado'
NOT 式を結合するには、AND および OR を使用します。 たとえば、次の式は、Maine 州を除くすべての New England の州を選択します。
SUB_REGION = 'New England' AND NOT STATE_NAME = 'Maine'
計算
式には、算術演算子 (+、-、*、/) を使用した演算を含めることができます。 演算は、次の例のように、フィールドと数値の間で行うことができます。
AREA >= PERIMETER * 100
演算は、フィールド間で行うこともできます。 たとえば、人口密度が 1 平方キロメートルあたり 25 人以下の郡を探すには、次の式を使用します。
POP1990 / AREA <= 25
演算子の優先順位
式は、標準演算子の優先順位ルールに従って評価されます。 たとえば、括弧で囲まれた部分の式は、括弧の外側の部分よりも先に評価されます。
HOUSEHOLDS > MALES * (POP90_SQMI + AREA)
SQL 式を編集するときに、SQL 編集モードでは、括弧を入力することで追加できます。または、項目モードでは、[グループ] コマンドおよび [グループ解除] コマンドを使用して括弧を追加または削除することができます。
サブクエリ
サブクエリは、別のクエリにネストされたクエリであり、ジオデータベース データ ソースでのみサポートされます。 サブクエリは、述語または集約関数を適用したり、別のテーブルに保存された値とデータを比較したりするために使用できます。 これには、IN キーワードまたは ANY キーワードを使用します。 たとえば、次のクエリは、indep_countries テーブルに含まれていない国だけを選択します。
COUNTRY_NAME NOT IN (SELECT COUNTRY_NAME FROM indep_countries)
注意:
シェープファイル、その他のジオデータベース以外のファイルベースのデータ ソースは、サブクエリをサポートしません。 バージョン対応のエンタープライズ フィーチャクラスおよびテーブルで実行されるサブクエリは、差分テーブルに格納されたフィーチャを返しません。 ファイル ジオデータベースは、このセクションで説明するサブクエリを制限付きでサポートしますが、エンタープライズ ジオデータベースは完全にサポートします。 エンタープライズ ジオデータベースのサブクエリの機能の詳細については、使用している RDBMS のマニュアルをご参照ください。
次のクエリは、countries テーブルに含まれるどのフィーチャの GDP2005 よりも大きい GDP2006 を持つフィーチャを返します。
GDP2006 > (SELECT MAX(GDP2005) FROM countries)
ファイル ジオデータベースでのサブクエリのサポートは、以下に制限されています。
- 比較演算子を持つスカラー サブクエリ。 スカラー サブクエリは、単一の値を返します。次に例を示します。
GDP2006 > (SELECT MAX(GDP2005) FROM countries)
ファイル ジオデータベースの場合、集合関数 AVG、COUNT、MIN、MAX、SUM は、スカラー サブクエリでのみ使用することができます。 - EXISTS 述語。次に例を示します。
EXISTS (SELECT * FROM indep_countries WHERE COUNTRY_NAME = 'Mexico')
演算子
次に、ファイル ジオデータベース、シェープファイル、カバレッジ、その他のファイルベースのデータ ソースによってサポートされるクエリ演算子を示します。 これらの演算子はエンタープライズ ジオデータベースでもサポートされますが、データ ソースでは別の構文が必要になる場合があります。 これらの演算子に加えて、エンタープライズ ジオデータベースでは、その他の機能もサポートされています。 詳細については、RDBMS のマニュアルをご参照ください。
算術演算子
算術演算子を使用して、数値の加算、減算、乗算、除算を実行します。
演算子 | 説明 |
---|---|
* | 乗算のための算術演算子 |
/ | 除算のための算術演算子 |
+ | 加算のための算術演算子 |
- | 減算のための算術演算子 |
比較演算子
比較演算子を使用して、2 つの式を比較します。
演算子 | 説明 |
---|---|
< | 未満。 文字列 (比較はアルファベット順に基づきます)、数値、日付に対して使用できます。 |
<= | 以下。 文字列 (比較はアルファベット順に基づきます)、数値、日付に対して使用できます。 |
<> | 等しくない。 文字列 (比較はアルファベット順に基づきます)、数値、日付に対して使用できます。 |
> | より大きい。 文字列 (比較はアルファベット順に基づきます)、数値、日付に対して使用できます。 |
>= | 以上。 文字列 (比較はアルファベット順に基づきます)、数値、日付に対して使用できます。 |
IS [NOT] NULL | 指定されたフィールドに NULL 値が含まれているレコードを選択します。 NULL の前に NOT が付く場合は、指定されたフィールドに任意の値を持つレコードを選択します。 |
論理演算子
比較演算子と同様、論理演算子はステートメントの真偽をテストして、指定したステートメントに当てはまる値を返します。
演算子 | 説明 |
---|---|
AND | 2 つの条件を結合し、両方の条件を満たすレコードを選択します。 たとえば、次の式は、敷地面積が 200 平方メートル以上で車 2 台分以上の車庫を持つすべての家を選択します。 AREA > 1500 AND GARAGE > 2 |
[NOT] BETWEEN x AND y | 値が x 以上 y 以下である場合に、レコードを選択します。 先頭に NOT が付く場合は、指定された範囲外の値を持つレコードを選択します。 たとえば、次の式は、1 以上 10 以下の値を持つレコードをすべて選択します。 OBJECTID BETWEEN 1 AND 10 これは次の式に相当します。 OBJECTID >= 1 AND OBJECTID <= 10 ただし、インデックス付きフィールドを検索する場合は、式に BETWEEN を使用すると、パフォーマンスが向上します。 |
[NOT] EXISTS | サブクエリがレコードを少なくとも 1 つ返す場合は TRUE、そうでない場合は FALSE を返します。 たとえば、次の式は、OBJECTID フィールドに 50 の値が含まれている場合に TRUE を返します。 EXISTS (SELECT * FROM parcels WHERE OBJECTID = 50) EXISTS 演算子は、ファイル ジオデータベースおよびエンタープライズ ジオデータベースでのみサポートされます。 |
[NOT] IN | フィールドに複数の文字列または値の 1 つが含まれているレコードを選択します。 先頭に NOT が付く場合は、フィールドに複数の文字列または値の 1 つが含まれていないレコードを選択します。 たとえば、次の式は 4 つの州名を検索します。 STATE_NAME IN ('Alabama', 'Alaska', 'California', 'Florida') |
x [NOT] LIKE y [ESCAPE 'escape-character'] | 部分文字列検索を行うには、= 演算子の代わりに、LIKE 演算子とワイルドカードを使用します。 パーセント記号 (%) は、その位置で、1 文字、100 文字、または 0 文字など、任意数の文字が許可されることを意味します。 また、1 文字を表すワイルドカードを検索に使用したい場合は、アンダースコア (_) を使用します。 文字以外のデータにアクセスする必要がある場合は、CAST 関数を使用します。 たとえば、次のクエリは、整数フィールド SCORE_INT から 8 で始まる値を返します。 CAST (SCORE_INT AS VARCHAR(10)) LIKE '8%' 検索文字列にパーセント記号またはアンダースコアを含めるには、ESCAPE キーワードを使用して、別の文字を「エスケープ」文字として指定します。エスケープ文字のすぐ後にあるパーセント記号またはアンダースコアは、そのままの文字として扱われます。 たとえば、次の式は、10% DISCOUNT や A10% のように 10% を含む文字列を返します。 AMOUNT LIKE '%10$%%' ESCAPE '$' |
NOT | 条件に一致しないレコードを選択します。 たとえば、次の式は、カリフォルニア以外のすべての州を選択します。 NOT STATE_NAME = 'California' |
OR | 2 つの条件を結合し、少なくとも 1 つの条件を満たすレコードを選択します。 たとえば、次の式は、敷地面積が 200 平方メートル以上あるか、車 2 台分以上の車庫を持つすべての家を選択します。 AREA > 1500 OR GARAGE > 2 |
文字列演算子
演算子 | 説明 |
---|---|
|| | 複数の文字列式を連結した文字列を返します。 FIRST_NAME || MIDDLE_NAME || LAST_NAME |
関数
次に、ファイル ジオデータベース、シェープファイル、カバレッジ、その他のファイルベースのデータ ソースによってサポートされる関数を示します。 これらの関数はエンタープライズ ジオデータベースでもサポートされますが、データ ソースでは別の構文または関数名が必要になる場合があります。 これらの関数に加えて、エンタープライズ ジオデータベースでは、その他の機能もサポートされています。 詳細については、RDBMS のマニュアルをご参照ください。
日付関数
すべての日付関数は日付値を返します。
ファイル ジオデータベース
関数 | 説明 |
---|---|
CURRENT_DATE | 現在の日付を返します。 |
EXTRACT(extract_field FROM extract_source) | extract_source の extract_field 部分を返します。 extract_source 引数は、日時 (DATE、DateOnly、TimeOnly、TimestampOffset) を表す式です。 extract_field 引数には、YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、MILLISECOND、TIMEZONE_HOUR、TIMEZONE_MINUTE のいずれかのキーワードを指定できます。 |
CURRENT TIME | 現在の時刻を返します。 |
ファイル ジオデータベースの EXTRACT の使用例:
- EXTRACT(YEAR from DateOnly) > 1951
- EXTRACT(YEAR from DateTimestamp) > 1981
- EXTRACT(YEAR from TimestampOffset) > 1981
- EXTRACT(TIMEZONE_HOUR from timeStampOffset) > 3
- EXTRACT(TIMEZONE_MINUTE from timeStampOffset) = 30
モバイル ジオデータベース
関数 | 説明 |
---|---|
CURRENT_DATE | 現在の日付を返します。 |
EXTRACT(extract_field, extract_source) | extract_source の extract_field 部分を返します。 extract_source 引数は、日時 (DATE、DateOnly、TimeOnly、TimestampOffset) を表す式です。 extract_field 引数には、YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、MILLISECOND、TIMEZONE_HOUR、TIMEZONE_MINUTE のいずれかのキーワードを指定できます。 |
CURRENT TIME | 現在の時刻を返します。 |
モバイル ジオデータベースの EXTRACT の使用例:
- EXTRACT('YEAR', DateOnly) > 1951
- EXTRACT('YEAR', DateTimestamp) > 1981
- EXTRACT('YEAR', TimestampOffset) > 1981
- EXTRACT('TIMEZONE_HOUR', timeStampOffset) > 3
- EXTRACT('TIMEZONE_MINUTE', timeStampOffset) = 30
文字列関数
引数 string_exp には、列の名前、文字列リテラル、またはデータ タイプを文字型として表すことができる別のスカラー関数の結果を指定することができます。
引数 character_exp は、可変長の文字列です。
引数 start または length には、数値リテラル、またはデータ タイプを数値型と表すことができる別のスカラー関数の結果を指定することができます。
文字列関数は 1 から始まります。つまり、文字列の最初の文字は 1 文字目となります。
関数 | 説明 |
---|---|
CHAR_LENGTH(string_exp) | 文字列の長さ (文字数) を返します。 |
LOWER(string_exp) | string_exp のすべての大文字を小文字に変換した文字列を返します。 |
POSITION(character_exp IN character_exp) | 第 2 文字式に含まれている第 1 文字式の位置を返します。 この結果は、精度とスケールを持つ厳密な数値であり、精度は実装定義、スケールは 0 です。 |
SUBSTRING(string_exp FROM start FOR length) | start で指定した文字位置から length で指定した文字数の文字列を string_exp から取得して返します。 |
TRIM(BOTH | LEADING | TRAILING trim_character FROM string_exp) | string_exp の先頭、末尾、または両端から trim_character を削除した文字列を返します。 |
UPPER(string_exp) | string_exp に一致する文字列を返します。すべての小文字が大文字に変換されます。 |
数値関数
すべての数値関数は数値を返します。
引数 numeric_exp、float_exp、または integer_exp には、データ タイプを数値型として表すことができる列の名前、別のスカラー関数の結果、または数値リテラルを指定することができます。
関数 | 説明 |
---|---|
ABS(numeric_exp) | numeric_exp の絶対値を返します。 |
ACOS(float_exp) | 角度をラジアンで示した float_exp の逆余弦を返します。 |
ASIN(float_exp) | 角度をラジアンで示した float_exp の逆正弦を返します。 |
ATAN(float_exp) | 角度をラジアンで示した float_exp の逆正接を返します。 |
CEILING(numeric_exp) | numeric_exp 以上の最も小さい整数を返します。 |
COS(float_exp) | float_exp の余弦を返します。float_exp は角度をラジアンで示します。 |
FLOOR(numeric_exp) | numeric_exp 以下の最も大きい整数を返します。 |
LOG(float_exp) | float_exp の自然対数を返します。 |
LOG10(float_exp) | float_exp の底が 10 の対数を返します。 |
MOD(integer_exp1, integer_exp2) | integer_exp2 で除算された integer_exp1 の余りを返します。 |
POWER(numeric_exp, integer_exp) | numeric_exp を integer_exp 乗した値を返します。 |
ROUND(numeric_exp, integer_exp) | numeric_exp を小数点以下の integer_exp で表される桁に丸めた値を返します。 integer_exp が負の場合、numeric_exp は小数点以上の |integer_exp| で表される桁に丸められます。 |
SIGN(numeric_exp) | numeric_exp の符号を表す値を返します。 numeric_exp が 0 よりも小さい場合は -1 が返されます。 numeric_exp が 0 の場合、0 が返されます。 numeric_exp が 0 より大きい場合は 1 が返されます。 |
SIN(float_exp) | float_exp の正弦を返します。float_exp は角度をラジアンで示します。 |
TAN(float_exp) | float_exp の正接を返します。float_exp は角度をラジアンで示します。 |
TRUNCATE(numeric_exp, integer_exp) | numeric_exp を小数点以下の integer_exp で表される桁に切り捨てた値を返します。 integer_exp が負の場合、numeric_exp は小数点以上の |integer_exp| で表される桁に切り捨てられます。 |
CAST 関数
CAST() 関数は、1 つのデータ タイプから別のデータ タイプに、値または式を変換します。 構文は次のとおりです。
CAST(expression AS data_type(length))
- expression は必須パラメーターで、リテラル値か、任意のタイプ (列名、変数など) の有効な式であり、これが変換されます。
- data_type は必須パラメーターです。使用されるキーワードは結果のデータ タイプになります。式はこのデータ タイプに型変換されます。 有効なデータ タイプで使用するキーワードのリストについては、下記の「表」をご参照ください。
- length は任意のパラメーターで、結果のデータ タイプの長さを指定します。
たとえば、文字列演算が必要なシナリオで、データが数値タイプ フィールドに格納されている場合はクエリは動作しません。 ただし、CAST() 関数を使用すると、数値フィールドを SQL 演算用の文字列に変換できます。 このコードは数値フィールド SQLNUM をテキスト フィールドとして型変換します。これでテキスト演算に使用できるようになります。
CAST(SQLNUM AS CHARACTER(12))
次の表に、データ タイプの変換に使用するキーワードを示します。大文字でも小文字でも指定できます。
データ タイプ | キーワード |
---|---|
Long Integer |
|
Short Integer |
|
Float (単精度浮動小数点) |
|
Double (倍精度浮動小数点) |
|
String |
|
Datetime |
|
注意:
|
CAST 関数の例
- 例 1:
CAST(AREA AS INTEGER)
AREA (Float データ タイプ) を INTEGER に型変換すると整数が返され、小数点以下の値は切り捨てられます。
- 例 2:
CAST(Rent AS FLOAT) + Utilities > 2000.45
Rent (CHARACTER データ タイプ) を FLOAT データ タイプに型変換します。Utilities も FLOAT データ タイプです。
EsriCast
SQLite CAST 演算子はネイティブ データ タイプに使用できますが、新しいフィールド タイプやその他のネイティブでないデータ タイプのリリースに伴い、SQLite が正しく動作するように演算子を調整する必要があります。 EsriCast は、モバイル ジオデータベースで必要な SQLite 演算子が、ArcGIS AllSource が操作できるさまざまなデータ タイプにアクセスして理解できるようにするために開発されました。
構文の例: EsriCast(expression, source_data_type, target_data_type)
EsriCast データ キーワード
データ タイプ | EsriCast キーワード |
---|---|
Short | Int16 |
Long | Int32 |
Big Integer | Int64 |
Float | Float32 |
Double | Float64 |
Date Only | DateOnly |
Time Only | TimeOnly |
Date Time Offset | タイムスタンプ |
日付/時間 | Date |
Text | Text |
EsriCast データ変換の例
変換元のデータ タイプ - 変換先のデータ タイプ | EsriCast 構文 |
---|---|
Short - Long | EsriCast(FC_Short_Data,'int16','int32') |
Big Integer - Short | EsriCast(FC_BigInteger_Data, 'int64', 'int16') |
Float - Double | EsriCast(FC_Float_Data, 'float32', 'float64') |
Date Time - Date Only | EsriCast(FC_DateTime_Data, 'date', 'dateonly') |
Time Only - Timestamp Offset | EsriCast(FC_TimeOnly_Data, 'timeonly', 'timestamp') |
Text - Short | EsriCast(FC_Text_Data, 'text', 'int16') |