この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

日付関数

SAQL クエリで日付を指定するには、日付関数と相対日付キーワードを使用します。

関数

相対日付は、ローカル時間ではなく UTC に対して相対的です。相対日付で返された日付は UTC 時間に基づく日付を反映するため、ローカル時間からのオフセットになる場合があります。

メモ

次の表は、SAQL 日付関数の一覧です。
日付関数 説明
date(year, month, day) 日付を返します。日付の 3 つのディメンションを年、月、日の順序で指定します。次に例を示します。
1date('OrderDate_Year', 'OrderDate_Month', 'OrderDate_Day')
date_diff(datepart,startdate,enddate) 2 つの日付間で��過した間隔を表す整数を返します。
datepart は、計算する間隔要素を示します。
  • year
  • month
  • quarter
  • day
  • week
  • hour
  • minute
  • second
startdate は開始日を示します。

enddate は終了日を示します。

2 つの日付の差は、指定された日付要素の違いに基づいて計算されます。たとえば、2 つの日付の年の差は、enddate の年要素から startdate の年要素が差し引かれて計算されます。

date_diff("year", toDate("31-12-2015", "dd-MM-yyyy"), toDate("1-1-2016", "dd-MM-yyyy")) の結果は 1 になります。

同じように、日付要素の月を使用した例を次に示します。

date_diff("month", toDate("31-12-2015", "dd-MM-yyyy"), toDate("1-1-2016", "dd-MM-yyyy")) の結果も 1 です。

startdateenddate より後である場合、結果は差を表す、負の整数になります。
例:
クエリ 結果
date_diff(“year", '2004-02-29', '2005-02-28’) 1
date_diff(“year", '2012/01/01', '2012/12/31’) 0
date_diff(“month", '2003-02-01', '2003-05-01’) 3
date_diff(“month", '2004/02/28', '2004/03/31’) 1
date_diff(“quarter", '2012-12-12', '2013-01-05') 1
date_diff(“week", '2012-12-12', '2013-01-05') 3
date_diff(“day", '2012-12-12', '2013-01-05') 24
date_diff(“hour", '2012-12-12', '2013-01-05') 576
date_diff(“minute", '2012-12-12', '2013-01-05') 34560
date_diff(“second", '2016-09-15 19:42:36', '2016-09-16 19:42:36') 86400

クエリの例:

1q = load \"em/dates\";
2q = foreach q generate date_diff("year", toDate(DateOfBirth, "yyyy-MM-dd"), now()) as age;
3q = order q by age asc;

無効な例:

1q = group q by date_diff("month", toDate(DateOfBirth, "yyyy-MM-dd"),
2      toDate(RegisteredDate));
1q = order q by date_diff("year", toDate(DateOfBirth, "yyyy-MM-dd"),
2      toDate(RegisteredDate));
1q = filter q by date_diff("day", toDate(DateOfBirth, "yyyy-MM-dd"), now());
date_to_epoch(date) 日付をエポック秒に変換します。これは toDate(epoch_seconds) 関数の逆です。

1970 年 1 月 1 日 00:00:00.000 GMT からの秒数を返します。これより前の日付が渡された場合、結果は負の数値になります。パラメータが日付でない場合、結果はエラーになります。パラメータとして null が渡された場合、null が返されます。

例:

1date_to_epoch(now()) == 1496404452 (current time)
1date_to_epoch(toDate("2017-06-02 11:54:12")) == 1496404452
date_to_string(date, formatString) 日付を文字列に変換します。
この関数は、最初の引数として toDate() または now(​) 関数を取る必要があります。
1q = foreach q generate date_to_string(now(​), \"yyyy-MM-dd HH:mm:ss\") as ds1;

まもなく廃止される toString() 関数を置き換えます (この関数と機能的に同一です)。

メモ

dateRange(startArray_y_m_d, endArray_y_m_d) 固定日付範囲を返します。最初のパラメータは、範囲の開始日を指定する配列です。2 番目のパラメータは、範囲の終了日を指定する配列です。以下に例を示します。
1dateRange([1970, 1, 1], [1970, 1, 31])
day_in_month(date) 特定の日付がその月の何日目かを表す整数を返します。使用法については day_in_week を参照してください。
day_in_quarter(date) 特定の日付がその四半期の何日目かを表す整数を返します。使用法については day_in_week を参照してください。
day_in_week(date) 特定の日付の曜日を表す整数を返します。1 = 日曜日、2 = 月曜日というようになります。

date は参照日を示します。

例:
1q = foreach q generate day_in_week(​toDate(OrderDate));
day_in_year(date) 特定の日付がその年の何日目かを表す整数を返します。使用法については day_in_week を参照してください。
daysBetween(date1, date2) 2 つの日付間の日数を整数で返します。
daysBetween() 関数は、ディメンションを直接引数として取ることはできません。toDate() および now(​) 関数を引数として渡します。
1q = foreach q generate daysBetween(​toDate(​OrderDate, “yyyy-MM-dd”​),
2   now()) as daysToShip;
1q = foreach q generate daysBetween(​​toDate(​​OrderDate, “yyyy-MM-dd”​​),
2   toDate(​​ShipDate, “yyyy-MM-dd”​​)) as daysToShip;
1q = foreach q generate daysBetween(​toDate(​OrderDate_​Year + “:” 
2   + OrderDate_​Month + “:” + OrderDate_​Day, “yyyy:MM:dd”​), toDate(​ShipDate_​Year + “:” 
3   + ShipDate_​Month + “:” + ShipDate_Day,​ “yyyy:MM:dd”​)) as daysToShip;
month_days(date) 特定の日付に対応する月の日数を返します。

date は参照日を示します。

例:
クエリ 結果
month_days(toDate('2004-02-12', "yyyy-MM-dd") 29
month_days(toDate('2012-04-07', "yyyy-MM-dd") 30
month_days(toDate('1990-13-11', "yyyy-MM-dd") Null

クエリの例:

1q = load \"em/dates\";
2q = foreach q generate month_days(toDate(BillDate, "yyyy-MM-dd")) as BillingMonth;
3q = order q by BillingMonth asc;

無効な例:

1q = group q by month_days(toDate(BillDate, "yyyy-MM-dd"));
1q = order q by month_days(toDate(BillDate, "yyyy-MM-dd"));
1q = filter q by month_days(toDate(BillDate, "yyyy-MM-dd"));
month_last_day(date) 特定の日付に対応する月の最終日の日付を返します。使用法については week_last_day を参照してください。
now() UTC で現在の日時を返します。この関数は、foreach ステートメントでのみ有効です。
1q = foreach q generate now() as now;

一般的に、この関数は daysBetween(​) および toString() 関数で使用されます。

quarter_days(date) 特定の日付に対応する四半期の日数を返します。使用法については month_days を参照してください。
quarter_last_day(date) 特定の日付に対応する四半期の最終日の日付を返します。使用法については week_last_day を参照してください。
toDate(string [,formatString]) 文字列を日付に変換します。formatString 引数が指定されていない場合は yyyy-MM-dd HH:mm:ss 形式が使用されます。
1q = foreach q generate toDate(​OrderDate);
1q = foreach q generate toDate(​OrderDate_​Day + \"-\" +​ OrderDate_​Month + \"-\" + ​OrderDate_​Year, \"dd-MM-yyyy\​");

多くの場合、この関数は daysBetween(​) または toString() に引数として渡されます。

toDate(epoch_seconds) UNIX のエポック秒を日付に変換します。epoch_seconds0 の場合、toDate(epoch_seconds)'1970-01-01 00:00:00' を返します。

この関数は、日付への期間の加算または日付からの期間の減算を行う場合に便利です。日付のタイムゾーンの違いを調整するときに時差を秒数で加算または減算すると、正しいローカル日付が算出されます。その時間がローカル子午線を越えている場合は、別の日付が算出されます。

たとえば、Current_Date'1970-01-01 00:00:00' からの秒数で表される現在日付の場合、関数 toDate(Current_Date - 8*3600) は 8 時間を減算します。実例については、「タイムゾーンの使用」を参照してください。

toString(date, formatString) 日付を文字列に変換します。
この関数は、最初の引数として toDate() または now(​) 関数を取る必要があります。
1q = foreach q generate toString(now(​), \"yyyy-MM-dd HH:mm:ss\") as ds1;

この関数は間もなく廃止されます。代わりに、機能的に同一の date_to_string() 関数を使用してください。

メモ

week_last_day(date) 特定の日付に対応する週の最終日の日付を返します。

date は参照日を示します。

例:
クエリ 結果
week_last_day(toDate('2016-12-08', "yyyy-MM-dd")) 2016-12-10
week_last_day(toDate('2015-07-05', "yyyy-MM-dd")) 2015-07-11
week_last_day(toDate('2012-11-33', "yyyy-MM-dd")) エラー

クエリの例:

1q = load \"em/dates\";
2q = foreach q generate week_last_day(toDate(BillDate, "yyyy-MM-dd")) as BillingWeek;
3q = order q by BillingWeek asc;

無効な例:

1q = group q by week_last_day(toDate(BillDate, "yyyy-MM-dd"));
1q = order q by week_last_day(toDate(BillDate, "yyyy-MM-dd"));
1q = filter q by week_last_day(toDate(BillDate, "yyyy-MM-dd"));
year_days(date) 特定の日付に対応する年の日数を返します。使用法については month_days を参照してください。
year_last_day(date) 特定の日付に対応する年の最終日の日付を返します。使用法については week_last_day を参照してください。

この関数が常に 12 月 31 日を返すことは明らかですが、年末までの日数を割り出すというような用途、および特定のロケールでの用途のために、この関数は組み込まれています。

メモ

固定日付範囲の指定

固定日付の範囲を指定するには、dateRange() 関数を使用します。日付を年、月、日の順序で指定します。

1a = filter a by date('year', 'month', 'day') in [dateRange([1970, 1, 1], [1970, 1, 11])];

相対日付範囲の指定

相対日付範囲を指定するには、相対日付キーワードを含む配列で in 演算子を使用します。次に、4 つの例を示します。

1a = filter a by date('year', 'month', 'day') in ["1 year ago".."current year"];
2a = filter a by date('year', 'month', 'day') in ["2 quarters ago".."2 quarters ahead"];
3a = filter a by date('year', 'month', 'day') in ["4 months ago".."1 year ahead"];
4a = filter a by date('year', 'month', 'day') in ["2 fiscal_years ago".."current day"];
次の相対日付キーワードがあります。
  • current day
  • n day(s) ago
  • n day(s) ahead
  • current week
  • n week(s) ago
  • n week(s) ahead
  • current month
  • n month(s) ago
  • n month(s) ahead
  • current quarter
  • n quarter(s) ago
  • n quarter(s) ahead
  • current fiscal_quarter
  • n fiscal_quarter(s) ago
  • n fiscal_quarter(s) ahead
  • current year
  • n year(s) ago
  • n year(s) ahead
  • current fiscal_year
  • n fiscal_year(s) ago
  • n fiscal_year(s) ahead
次の表に、いくつかの相対日付キーワードの時間枠を示します。これらの時間枠の例では、現在の日付は 2014/12/16FiscalMonthOffset 1 (会計年度は 2 月 1 日に開始) です。
相対日付値キーワード 開始日 終了日
current day 2014/12/16 00:00:00 2014/12/16 23:59:59
current quarter 2014/10/1 00:00:00 2014/12/31 23:59:59
1 year ago 2013/1/1 00:00:00 2013/12/31 23:59:59
1 month ahead 2015/1/1 00:00:00 2015/1/31 23:59:59
current fiscal_year 2014/2/1 00:00:00 2015/1/31 23:59:59
current fiscal_quarter 2014/11/1 00:00:00 2015/1/31 23:59:59
2 fiscal_quarters ahead 2015/5/1 00:00:00 2015/7/31 23:59:59
current day - 1 year 2013/12/16 00:00:00 2013/12/16 23:59:59
current fiscal_year + 5 days 2014/2/6 00:00:00 2014/2/6 23:59:59

標準会計期間のみがサポートされています。Salesforce ヘルプの「会計年度について」を参照してください。

メモ

日付の加算と減算

相対日付キーワードを使用して、日付の加算と減算を実行できます。

次に、加算と減算を使用した相対日付キーワードの時間枠の例を示します。これらの時間枠の例では、現在の日付は 2014/12/16FiscalMonthOffset 1 (会計年度は 2 月 1 日に開始) です。

次のクエリでは、開始日は 2013-12-16 00:00:00 で終了日は無制限です。
1a= filter a by date('year', 'month', 'day') in ["current day - 1 year"..] ;
次のクエリでは、開始日は 2014-12-16 00:00:00 で終了日は 2017-3-31 23:59:59 です。
1a= filter a by date('year', 'month', 'day') in ["current day".."2 years ahead + 3 months"];
終了日は次のように決定されます。年は 2014 であるため 2 年後は 2016 になり、2016 年の終了時間は 2016-12-31 23:59:59 です。3 か月を加算すると、合計終了日は 2017-3-31 23:59:59 です。
次のクエリでは、開始日は 2014-2-6 00:00:00 で終了日は 2017-3-31 23:59:59 です。
1a= filter a by date('year', 'month', 'day') in ["current fiscal_year + 5 days".."2 years ahead + 3 months"];

無制限の相対日付範囲の使用

「List all opportunities closed after 12/23/2014 (2014 年 12 月 23 日より後に成立したすべての商談をリストする)」や「Get a list of marketing campaigns from before 04/2/2015 (2015 年 4 月 2 日より前のマーケティングキャンペーンのリストを取得する)」のようなクエリを作成するには、無制限の日付範囲を使用します。

次の例は無制限の相対日付範囲です。
1a = filter a by date('year','month','day') in [.."current month"];

次の例は無制限の固定日付範囲です。OrderDate の日付形式は yyyy-MM-dd です。
1q = filter q by OrderDate in [“2015-01-01"​..];

タイムゾーンの使用

toDate() 関数の実用的な用途は、Analytics ダッシュボードでのタイムゾーンの変更を計算することです。次の JSON コードフラグメントでは、変換に computeExpression アクションを使用し、saqlExpression を使用して toDate() 関数をコールします。この方法により、ローカルまたは UTC の最も適切な日時をダッシュボードに表示できます。

1"Extract_Opportunity": {
2  "action": "computeExpression",
3  "parameters": {
4    "source": "Digest_Opportunity",
5    "mergeWithSource": true,
6    "computedFields": [
7     {
8      "name": "CreatedDateNew",
9      "type": "Date",
10      "format": "MM/dd/yyyy",
11      "saqlExpression": "toDate(CreatedDate_sec_epoch - 8*3600)"
12     }
13    ]
14  }
15},

この例は、既存の日付 CreatedDate_sec_epoch を取得し、8 時間を減算して新しい日付 CreateDateNew を作成しています。次の表に、この計算によって (形式が適用された) CreatedDateNew 日付がどのように変更されるかを示します。いずれの場合も、時間の変更に伴い日付も変更されています。

CreatedDate_sec_epoch CreatedDateNew
2015-11-03T06:49:25.00OZ 11/2/2015
2014-08-19T06:42:33.00OZ 8/18/2014
2014-09-28T03:12:25.00OZ 9/27/2014

詳細は、「computeExpression 変換」 トピックを参照してください。