参考: SQL 式
SQL 式は、さまざまなデータ インテグレーションの目的に使用できます。サポートされる SQL 言語機能は、SQL ステートメントが実行されるシステムによって異なります。以下にいくつか例を挙げます。
- ステージングにインポートされたデータに対するクエリで、すべての SQL 言語機能を使用できます。
- NetSuite などの外部システム向けのクエリでは、SQL フィルタを活用して簡易な機能のセットを使用できます。
データ ソース タイプの固有の制限事項および使用上の注意については、このドキュメントの後半のセクションを参照してください。
- NetSuite SQL フィルタ
- スプレッドシート SQL フィルタ
- JDBC SQL フィルタ
- Salesforce SQL フィルタ
- Intacct SQL フィルタ
- Microsoft Dynamics GP SQL フィルタ
サポートされる SQL 式は限られています。インテグレーション設定では、他の演算子も別の方法でサポートされます。例: SQL 結合を作成するには、
"データ コンポーネント"
の "カスタム テーブル"
フォルダから "結合テーブル"
をデータ ソースのテーブル領域にドラッグすると、SQL 結合テーブルと列を追加できます。リテラル値
固定の DateTime 値またはリテラル値を使用した式にある、不変の文字列/数値などの埋め込み定数。
データ タイプ | 構文 | 説明 | 使用例 |
|---|---|---|---|
テキスト | '*****' | シングル クォートで囲まれたテキスト文字列。テキスト内にシングル クォートを含めるには、シングル クォートを 2 つ使用してエスケープする必要があります | 'It''s hot outside' |
整数 | # | 表示されるとおり正確に入力します | 999 |
浮動小数 | #.# | 小数部分が 0 である場合でも、浮動小数値には必ずピリオド (.) を含める必要があります | 7.7 |
日時 | TIMESTAMP '*****' | キーワード TIMESTAMP の後の、シングル クォートで囲まれた一定の長さの yyyy-mm-dd hh:mm:ss.SSS 形式の日付
分数秒には 3 桁の精度を指定できます。最大値は 6 桁です。 | TIMESTAMP '1934-11-09 17:05:12.012345'
TIMESTAMP '2013-01-02 03:14:05.006006' TIMESTAMP '2013-01-02 03:14:05.006' TIMESTAMP '2013-01-02 03:14:05' |
日付 | DATE '*****' | キーワード DATE の後の、シングル クォートで囲まれた一定の長さの yyyy-mm-dd 形式の日付 | DATE '1879-03-14' |
ブール値 | TRUE (または FALSE) | キーワード TRUE またはキーワード FALSE | FALSE |
演算子
数値演算子は、数値 (整数、浮動小数、ビット) の式、値または列で算術演算を実行します。テキスト演算子は、2 つ以上のテキスト式、値、または列を結合します。
適用先 | 演算子 | 説明 | 使用例 |
|---|---|---|---|
数字 | + | 2 つの数値を加算します | MyNumericColumn + 1000 |
数字 | - | 左側の値から右側の値を減算します | MyNumericColumn - 1000 |
数字 | / | 左側の値を右側の値で除算します | MyNumericColumn / 1000 |
数字 | * | 2 つの値を乗算します | MyNumericColumn * 1000 |
テキスト | || | 2 つのテキスト値を連結します | MyTextColumn || ' a suffix' |
比較式と論理式
これらの式は、1 (true) または 0 (false) になり、テーブル結合式または CASE WHEN [expr] THEN [value] END 比較の [expr] として使用できます。比較式および論理式は、テキスト、数値または日時列で演算できます。
適用先 | 構文 | 説明 | 使用例 |
|---|---|---|---|
任意 | = | 2 つの値または式が等しいかどうかをチェックします | MyColumn1 = MyColumn2 |
任意 | <> | 2 つの値または式が等しくないかどうかをチェックします | MyColumn1 <> MyColumn2 |
任意 | IS NULL | 値または式が NULL であるかどうかをチェックします。NULL は空の文字列と等価ではありません | MyColumn1 IS NULL |
任意 | IS NOT NULL | 値または式が nonNULL 値に解決されるかどうかをチェックします | MyColumn1 IS NOT NULL |
任意 | < | 左側の値または式が右側の値または式よりも小さいかどうかをチェックします | MyColumn1 < MyColumn2 |
任意 | <= | 左側の値または式が右側の値または式以下かどうかをチェックします | MyColumn1 <= MyColumn2 |
任意 | > | 左側の値または式が右側の値または式よりも大きいかどうかをチェックします | MyColumn1 > MyColumn2 |
任意 | >= | 左側の値または式が右側の値または式以上かどうかをチェックします | MyColumn1 >= MyColumn2 |
任意 | IN | 値または式がセット内に含まれているかどうかをチェックします | MyColumn1 IN (1, 2, 3) |
任意 | NOT IN | 値または式がセット内に含まれていないかどうかをチェックします | MyColumn1 NOT IN (1, 2, 3) |
テキスト | LIKE | テキスト値または式がパターンに一致するかどうかをチェックします。% 文字はワイルドカードとして動作します | MyColumn1 LIKE '%Apple' |
テキスト | NOT LIKE | テキスト値または式がパターンに一致しないかどうかをチェックします。% 文字はワイルドカードとして動作します | MyColumn1 NOT LIKE '%Apple' |
比較 | AND | 2 つの比較を評価し、両方の式が真である場合にのみ true を返します | MyColumn1 >= MyColumn2 AND MyColumn1 IN (1, 2, 3) |
比較 | OR | 2 つの比較を評価し、いずれかの式が真である場合に true を返します | (MyColumn1 >= MyColumn2) OR MyColumn1 IN (1, 2, 3) |
スカラー関数
スカラー関数は、入力値を受け取り、単一の値を返します。
構文 | 説明 | 使用例 |
|---|---|---|
ビット関数 | ||
CAST(expr AS BIT) | テキスト/浮動小数/整数値をビット (0 または 1) 値に変換します | CAST('1' AS BIT) => 1 |
整数関数 | ||
CAST(expr AS INTEGER) | テキスト/浮動小数/ビット値を整数値に変換します | CAST('2' AS INTEGER) => 2 |
TIMESTAMPDIFF([datepart] FROM [datetime_expr1] TO [datetime_expr2]) | [datetime_expr1] から [datetime_expr2] までの [datepart] の (DAY) の数値を取得します | TIMESTAMPDIFF(DAY FROM TIMESTAMP '2013-02-01 00:00:00.000' TO TIMESTAMP '20130210 00:00:00.000') => 9 |
DATEDIFF([datepart] FROM [date_expr1] TO [date_expr2]) | [date_expr1] から [date_expr2] までの [datepart] の (DAY) の数値を取得します | DATEDIFF(DAY FROM DATE '2013-02-01' TO DATE '2013-02-10') => 9 |
EXTRACT([datepart] FROM [datetime_expr]) | [datetime_expr] から [datepart] (年/月/日/時/分/秒) を取得します | EXTRACT(MONTH FROM DATE '2013-02-01') => 2 |
LENGTH([text_expr]) | [text_expr] の長さを取得します | LENGTH('Hello') => 5 |
POSITION([find_text_expr] IN [search_text_expr]) | [search_text_expr] の中で [find_text_expr] の最初のインデックスを取得します。最初の文字は 1 です。 | POSITION('at' IN 'hat') => 2 |
POSITION([find_text_expr] IN [search_text_expr] FROM [start]) | [search_text_expr] の中で、[start] より後の [find_text_expr] の最初のインデックスを取得します ([start] が -1 の場合は、最後のインデックスを検索します)。最初の文字は 1 です。 | POSITION('a' IN 'a hat' FROM 1) => 4 |
浮動小数関数 | ||
CAST(expr AS FLOAT) | テキスト/整数/ビット値を浮動小数値に変換します | CAST('1.01' AS FLOAT) => 1.01 |
テキスト関数 | ||
CAST(expr AS NVARCHAR) | 浮動小数/整数/ビット値をテキスト値に変換します | CAST(1.01 AS NVARCHAR) => '1.01' |
TRIM([text_expr]) | [text_expr] から先頭と末尾のスペースを削除します | TRIM(' xxx ') => 'xxx' |
SUBSTRING([text_expr] FROM [start_int_expr]) | ポジション [start_int_expr] から [text_expr] の一部を抽出します。最初の文字はポジション 1 です。 | SUBSTRING('aaabbbccc' FROM 3) => 'abbbccc' |
SUBSTRING([text_expr] FROM [start_int_expr] FOR [len_int_expr]) | ポジション [start_int_expr] から [text_expr] の [len_int_expr] 文字を抽出します。最初の文字はポジション 1 です。 | SUBSTRING('aaabbbccc' FROM 3 FOR 3) => 'abb' |
REPLACE([text_expr_1] WITH [text_expr_2] IN [text_expr_3]) | [text_expr_3] の中で [text_expr_1] のすべてのインスタンスを [text_expr_2] の値に置き換えます。 | REPLACE('z' WITH 'a' IN 'zba') => 'aba' |
REGEX_REPLACE([text_expr_1] WITH [text_expr_2] IN [text_expr_3]) | [text_expr_3] で正規表現 [text_expr_1] に一致するすべてのインスタンスを [text_expr_2] に置き換えます。 | REGEX_REPLACE('[0-9]' WITH 'a' IN 'a7b5c') => 'aabac'
unicode の空白を含むすべての空白を削除または置換するには、[\s] の代わりに次の構文を使用します。[\u0009\u0020\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000] |
SPLIT_PART([string],[delimiter],[part]) | 特定の文字で文字列を区切り、インデックスで設定した値を選択します。これにより、あるパターンの n 番目の出現箇所が抽出され、それが返されます。最初の要素は 1 から始まります。インデックスが範囲外の場合、式は空の文字列を返します。 | SPLIT_PART('Plan|1991|Tennis', '|', 2) =>'1991' SPLIT_PART('Plan|1991|Tennis', '/', 1) => 'Plan|1991|Tennis' SPLIT_PART('Plan|1991|Tennis', '/', 2) => '' |
TO_ACCOUNT_CODE([text_expr_1]) | 値が Planning の "科目コード" フィールドと互換性があることを確認します。すべてのスペースを削除し、英数字以外の文字をアンダースコアに置き換え、2048 文字を超える値を切り捨てます | TO_ACCOUNT_CODE('A - 860+') => 'A_860' |
日時関数 | ||
CAST([text_expr] AS TIMESTAMP FROM '[timestamp_format]') | 既知の構造/形式のテキスト値を日時値に変換します。特定の [timestamp_format] 値のみが許可されます (下記を参照してください) | CAST('2013-01-02' AS TIMESTAMP FROM 'yyyy-mm-dd') => TIMESTAMP '2013-01-02 00:00:00.000' |
TRUNCATE_TIMESTAMP([datetime_part] FROM [datetime_expr]) | 日時 [datetime_expr] を、年/月/日/時間のグレゴリオ暦 [datetime_part] に切り詰めます | TRUNCATE_TIMESTAMP(MONTH FROM TIMESTAMP '2013-11-22 12:13:14.015') => TIMESTAMP '2013-11-01 00:00:00.000' |
日付関数 | ||
CAST([text_expr] AS DATE FROM '[date_format]') | 既知の構造/形式のテキスト値を日付値に変換します。特定の [date_format] 値のみが許可されます (下記を参照してください) | CAST('2013-01-02' AS DATE FROM 'yyyy-mm-dd') => DATE '2013-01-02 00:00:00.000' |
TRUNCATE_DATE([date_part] FROM [date_expr]) | 日付 [date_expr] を、年/月/日/時間のグレゴリオ暦 [date_part] に切り詰めます | TRUNCATE_DATE(MONTH FROM DATE '2013-11-22') => DATE '2013-11-01 00:00:00.000' |
時定数
インテグレーションは、SQL 式で使用できる現在の日付と時刻に関連する以下の 2 つの定数をサポートしています。
構文 | 説明 | 使用例 |
|---|---|---|
CURRENT_TIMESTAMP | 現在の日時を取得して、日時オブジェクトが使用されているすべての場所で使用できます。 | EXTRACT(YEAR FROM CURRENT_TIMESTAMP) |
CURRENT_DATE | 現在の日付を取得して、日付オブジェクトが使用されているすべての場所で使用できます。 | (DATEDIFF(DAY FROM CURRENT_DATE TO [column_reference])) <= 30 |
CASE ステートメント
Case ステートメントは、多くの言語の if ステートメントと同様に、他の値に基づいて値を選択するのに使用されます
構文 | 説明 | 使用例 |
|---|---|---|
CASE WHEN [logic_expr1] THEN [result_expr1] WHEN [logic_expr#] THEN [result_expr#] ELSE [result_expr_def] END | true を返す最初の [logic_expr] から [result_expr] が返されます | CASE WHEN 1>2 THEN 'x' ELSE 'y' END => 'y' |
CASE [expr] WHEN [expr1] THEN [result_expr1] WHEN [expr#] THEN [result_expr#] ELSE [result_expr_def] END | [expr] に等しい最初の [expr#] から [result_expr] が返されます | CASE 2 WHEN 1 THEN 'x' ELSE 'y' END => 'y' |
COALESCE ステートメント
Coalesce は、引数を順番に評価し、定義された引数リストから最初の非 null 値を返します。Coalesce は SQL 列、ローダ内の SQL フィルタ、および結合式で使用できます。Coalesce は、ステージング テーブルのインポート フィルタでは使用できません。
構文 | 説明 | 使用例 |
|---|---|---|
COALESCE ([expr]) | [expr] で最初の非 null を返します | COALESCE (NULL,NULL,20,NULL,NULL,10) => 20 |
テーブル リレーションシップの式
"テーブル リレーションシップ" 項目を使用してテーブルを結合する場合、結合式を指定する必要があります。
結合しようとしているテーブルには、同じ名前の列が含まれている可能性があります。同じ名前の列が存在する場合は、以下を使用してそれらの列を区別する必要があります。
- 主テーブルの列: 「P」例: P. “MyColumn”
- その他のテーブルの列には "R"。例: R. “MyColumn”
CAST ([text_expr] AS TIMESTAMP FROM '[timestamp_format]') 関数で、以下の [timestamp_format] の値を使用できます。
- 'mon dd yyyy hh:mitt'
- 'mm/dd/yyyy'
- 'yyyy.mm.dd'
- 'yyyy-mm-dd'
- 'dd/mm/yyyy'
- 'dd.mm.yyyy'
- 'dd-mm-yyyy'
- 'dd mon yyyy'
- 'mon dd yyyy'
- 'mon dd yyyy hh:mi:ss:mmmmmmtt'
- 'mm-dd-yyyy'
- 'yyyy/mm/dd'
- 'yyyymmdd'
- 'dd mon yyyy hh:mi:ss:mmmmmm'
- 'yy-mm-dd hh:mi:ss'
- 'yy-mm-dd hh:mi:ss.mmmmmm'
- 'yy-mm-ddThh:mi:ss.mmmmmm'
- "yyyymondd"
- "yyyy-mon-dd"
- "ddmyyyy"
- "mm/dd/yy"
- ‘yy.mm.dd’
- "dd/mm/yy"
- ‘dd.mm.yy’
- "dd-mm-yy"
- "dd month yy"
- "mon dd yy"
- "mm-dd-yy"
- "yy/mm/dd"
- "yymmdd"
データ ソース固有のデータ インポート フィルタ SQL の制限事項および使用上の注意
データ ソース固有のデータ インポート フィルタ SQL の制限事項および使用上の注意を以下に記載しています。
- NetSuite データ ソース テーブル
- NetSuite に対して直接クエリを実行する場合 (NetSuite からステージングにインポートされたレコードにクエリを行う場合ではなく)、フィルタ式は NetSuite が Web サービスを通じて公開する機能に限定されます。
- 比較式と論理式を持つ単純な列フィルタは、NetSuite に対してクエリを実行する場合に使用できます。
- フィルタは AND で結合できますが、OR で結合することはできません。
- 演算子 (+、/、*、$、|| など) は使用できません。
- スカラー関数は使用できません。
- CASE ステートメントは使用できません。
- カスタム列をフィルタするには、インポートするカスタム列にマークを付ける必要があります。
- 一部の列フィルタでは、フィルタを動作させるために特定の NetSuite 機能を有効にする必要があります。
- 一部のテーブルおよび一部の列は、フィルタリングをサポートしていません。
- スプレッドシート データ ソース テーブル
- スプレッドシート ファイルを直接クエリする場合 (スプレッドシートからステージングにインポートされた記録をクエリするのではなく)、フィルタ式はクエリ対象のファイルのアップロード ID のみを指定できます。アップロード ID が指定されていない場合は、インポートされた最新のファイルからのデータが表示されます。
- JDBC データ ソース テーブル
- 比較式と論理式を持つ単純な列フィルタは、JDBC データ ソースをクエリする場合に使用できます。
- 演算子 (+、/、*、$、|| など) は使用できません。
- スカラー関数は使用できません。
- CASE ステートメントは使用できません。
- Salesforce データ ソース テーブル
- 比較式と論理式を持つ単純な列フィルタは、Salesforce をクエリする場合に使用できます。
- 演算子 (+、/、*、$、|| など) は使用できません。
- スカラー関数は使用できません。
- CASE ステートメントは使用できません。
- Intacct データ ソース テーブル
- 比較式と論理式を持つ単純な列フィルタは、Intacct をクエリする場合に使用できます。これには、IN(..)、IS NULL、IS NOT NULL、LIKE および NOT LIKE ステートメントが含まれます。
- Intacct では演算子 <> をサポートしていないため、代わりに NOT IN() の比較を使用します。
- 演算子 (+、/、*、$、|| など) は使用できません。
- スカラー関数は使用できません。
- CASE ステートメントは使用できません。
- ブール値列に対するフィルタでは、true/false キーワードを使用する必要があります。これは、Intacct では 1/0 が true/false と同じであると認識されないためです。
- Microsoft Dynamics GP データ ソース テーブル
- 比較式と論理式を持つ単純な列フィルタは、Microsoft Dynamics GP をクエリする場合に使用できます。
- 演算子 (+、/、*、$、|| など) は使用できません。
- スカラー関数は使用できません。
- CASE ステートメントは使用できません。