ITナレッジ Salesforce

【Salesforce】SOQLとSQLの日付の扱い方の違いとは?

【Salesforce】SOQLとSQLの日付の扱い方の違いとは?
悩む人
悩む人

SOQLの日付の絞り込みが上手くいかない、、

SOQLの日付の扱い方はSQLとは違います!

きい
きい

 

この記事を書いた人

  • エンジニア歴4年のフリーランスデータエンジニア
  • 高卒工場勤務からエンジニア転職
  • 3年目でフリーランスになり年収1000万↑達成
  • フルリモ歴2年、2児の育児中

 

今回は、SalesforceのSOQLと、SQLでの日付データの扱い方について、簡単にわかりやすく説明します!

 

本記事で取り扱うデータベースについて

  • Account(取引先):企業や組織の情報。
  • Contact(取引先責任者):Accountに関連する人物の情報。
  • Order__C(注文):取引先に関連する注文情報。

 

SOQLとSQLの日付データの違い

それでは、SQLとSOQLが日付をどう扱うかの基本を見てみましょう!

1. 日付のフォーマット

SQLでは、日付を標準的なフォーマット(例えば YYYY-MM-DD)で扱います。一方、SOQLでは、Salesforceのシステムが自動的にISO 8601形式の日付を使います。これは YYYY-MM-DDThh:mm:ss.sssZ という形で、これは世界標準の時間表記です。

SQLの例

SELECT * FROM Order__C WHERE OrderDate = '2024-10-19';

SOQLの例

SELECT Id, OrderDate FROM Order__C WHERE OrderDate = 2024-10-19T00:00:00Z;

SQLではシンプルな日付フォーマットを使うことが多いですが、SOQLでは時間も含まれた詳細なフォーマットになります。

 

2. 日付リテラルの活用(SOQLの独自機能)

Salesforceには日付リテラルという便利な機能があります。まずはSQLでの指定方法から見ていきましょう。

SQLで過去30日間の注文を取得する場合

SELECT * FROM Order__C WHERE OrderDate >= CURDATE() - INTERVAL 30 DAY;

SQLでは演算を使って指定する必要があります。

 

SOQLで過去30日間の注文を取得する場合

SELECT Id, OrderDate FROM Order__C WHERE OrderDate = LAST_N_DAYS:30;

このように、SalesforceのSOQLでは日付リテラルを使用し、特定の時間範囲を簡単に指定できます。以下はSOQLで使える日付リテラルの例です。

  • TODAY: 今日の日付
  • YESTERDAY: 昨日
  • LAST_WEEK: 先週
  • NEXT_MONTH: 来月
  • LAST_N_DAYS:n: 過去n日間
  • NEXT_N_DAYS:n: 今後n日間

 

SOQLの日付の時差とタイムゾーン

Salesforceでは、デフォルトでUTC(協定世界時)が使われます。これは、世界標準の時間であり、日本時間(JST)とは9時間の時差があります。

1. UTCからJST(日本時間)に合わせて日付を取得する方法

日付をJSTで扱いたい場合、SOQLではUTCから9時間足してデータを取得する必要があります。Salesforceでは、ユーザーのタイムゾーンに基づいて日付を自動的に調整してくれる機能もありますが、細かく指定する場合は時差を考慮した調整が必要です。

日付リテラルを使用し昨日のデータを取得する場合

以下のクエリは、UTCと日本時間の時差を考慮して設定する必要があります。

SELECT * FROM Order__C WHERE OrderDate >= '2024-10-18 15:00:00' AND OrderDate < '2024-10-19 15:00:00';

日付リテラルを使用し昨日のデータを取得する場合

以下のクエリは、Salesforceはユーザーのタイムゾーンを考慮してデータを自動的に調整します。

SELECT Id, OrderDate FROM Order__C WHERE OrderDate = YESTERDAY;

 

2. SOQLのタイムゾーン設定の重要性

SalesforceのSOQLクエリは、ユーザーのタイムゾーンに基づいてデータを返すため、特に時間を伴うクエリでは、タイムゾーンの設定が非常に重要です。クエリが実行されたタイミングや、ユーザーのタイムゾーンによって結果が異なることがあるため、正確なデータ取得には注意が必要です。

組織のタイムゾーン設定画面

 

まとめ

SalesforceのSOQLとSQLは、日付の取り扱いにおいて多くの違いがあります。それぞれの違いを理解して使い分けることで、より効率的にデータを操作できます。

  • 日付フォーマット:SOQLはISO 8601形式で時間も含まれます。
  • 日付リテラル:SOQLでは便利な日付リテラルが使えます(例:TODAY, LAST_WEEK)。
  • 時差の考慮:SOQLはUTCがデフォルトですが、Salesforceはユーザーのタイムゾーンを考慮します。

SOQLの独自ルールをしっかり理解し、Salesforceの日時取得を正確に行いましょう!

    きい(@kii_sfpy)

きい

エンジニア4年目のフリーランスデータエンジニア。

INTJ-A/5w4、独立的で戦略的な探求者らしい。

Python, Typescript, Salesforce, GCP, AWS, Tableau …etc

開発に関するご相談も、お気軽にご連絡ください! 

お問い合わせはコチラ

-ITナレッジ, Salesforce
-, ,