Salesforce SOQLエラー『Invalid aggregate function: convertTimezone』の原因と対処法


Salesforce SOQLにおけるconvertTimezoneエラーの解説と解決方法

SalesforceのSOQLでは、convertTimezone() 関数は単独では使用できず、必ず日付関数の内部で使用する必要があります
例えば、次のようなクエリはエラーとなります。

SELECT convertTimezone(CreatedDate)
FROM Opportunity

このクエリでは、convertTimezone() が単体で使用されているため、エラーが発生します。実際、convertTimezone() は日付データのタイムゾーン変換を行いますが、その結果を直接返すことはできません。代わりに、日付関数と組み合わせる必要があります


正しい使用例

以下の例では、convertTimezone()DAY_ONLY() 関数と組み合わせて使用し、CreatedDateのタイムゾーン変換後の日付のみを取得しています。

SELECT DAY_ONLY(convertTimezone(CreatedDate))
FROM Opportunity

このように、DAY_ONLY()HOUR_IN_DAY() といった日付関数の内部で convertTimezone() を利用することで、正しく動作させることができます。

その他の例:

  • 時間のみ取得する場合:

    SELECT HOUR_IN_DAY(convertTimezone(CreatedDate))
    FROM Opportunity
    
  • 集計クエリでの利用例:

    SELECT DAY_ONLY(convertTimezone(CreatedDate)), COUNT(Id)
    FROM Lead
    GROUP BY DAY_ONLY(convertTimezone(CreatedDate))
    

まとめ

  • エラーの原因:
    convertTimezone() を単独で使用すると、SOQLで「Invalid aggregate function: convertTimezone」というエラーが発生します。

  • 解決策:
    convertTimezone()DAY_ONLY()HOUR_IN_DAY() などの日付関数の内部で使用してください。

この手法を用いることで、SalesforceのSOQLクエリ内でタイムゾーン変換を正しく行い、エラーを回避することができます。

コメント