작성일자 : 2023-11-23
Ver 0.1.1
0. Intro
[SFDC]SOQL 소개
작성일자 : 2023-09-17 Ver 0.1.1 1. SOQL이란? SOQL은 Salesforce Object Query Language의 줄임말로 Salesforce Objects에서 Record를 다루는 언어이다. 문법은 SQL과 크게 다르진 않지만, 그렇다고 완전하게 SQL과 동일하
junius96.com
Saleforce의 날짜 관련 필드는 일반 RDBMS와는 다르다. 특히 날짜/시간(dateTime) 필드는 UTC(Coordinated Universal Time)를 기반으로 한다는 특징이 있다.
WHERE절에서 필터링을 할때는 다양한 옵션이 있어 이를 알아둔다면 SOQL 작성시 유용할 것이다.
특히 LAST, NEXT 와 같은 옵션들이 있고 특징들이 있다.
1. date
WHERE 절의 fieldExpression은 날짜 및 날짜/시간 필드를 기반으로 쿼리 결과 필터링을 지원한다. 필드 이름과 지정된 날짜 값 사이에 비교 연산자를 사용하여 조건과 일치하는 결과를 필터링한다. 예를 들어 이 쿼리는 지정된 날짜 및 시간 이후에 생성된 계정 레코드를 필터링한다.
SELECT Id
FROM Account
WHERE CreatedDate > 2005-10-08T01:02:03Z
특정 날짜를 기준으로 쿼리 결과를 필터링하려면 날짜 형식을 사용하여 값을 설정
특정 날짜 및 시간을 기준으로 쿼리 결과를 필터링하려면 dateTime 형식을 사용하여 값을 설정
이 표에는 SOQL 쿼리의 WHERE 절에 사용할 수 있는 지원되는 날짜 및 날짜/시간 형식이 나와 있다.
date | YYYY-MM-DD | - 1999-01-01 |
dateTime |
|
|
dateTime 필드 값은 Salesforce에 UTC(Coordinated Universal Time)로 저장되지만 시간대 오프셋을 사용하여 다른 시간대의 dateTime 값을 제공할 수 있습니다. 시간대 오프셋은 항상 UTC를 기준으로 한다.
이에 한국에서 dateTime을 사용하려면 9시간을 더하여 사용해야 한다.
dateTime 형식 및 시간대 오프셋에 대한 자세한 내용은 다음을 참조하세요.
http://www.w3.org/TR/xmlschema-2/#isoformats
http://www.w3.org/TR/NOTE-datetime
2. Filtering using date Literal
YESTERDAY | - 현재 날짜 기준 전날의 오전 12시부터 24시간 | SELECT Id FROM Account WHERE CreatedDate = YESTERDAY |
TODAY | - 현재 날짜의 오전 12시부터 24시간 | SELECT Id FROM Account WHERE CreatedDate > TODAY |
TOMORROW | - 현재 날짜 기준 다음날의 오전 12시부터 24시간 | SELECT Id FROM Opportunity WHERE CloseDate = TOMORROW |
LAST_WEEK | - 현재 날짜 기준 전주 첫날의 오전 12시부터 7일 | SELECT Id FROM Account WHERE CreatedDate > LAST_WEEK |
THIS_WEEK | - 현재 날짜 기준 주 첫날의 오전 12시부터 7일 | SELECT Id FROM Account WHERE CreatedDate < THIS_WEEK |
NEXT_WEEK | - 현재 날짜 기준 다음주 첫날의 오전 12시부터 7일 | SELECT Id FROM Opportunity WHERE CloseDate = NEXT_WEEK |
LAST_MONTH | - 현재 날짜 기준 전달 첫날의 오전 12시부터 1달 | SELECT Id FROM Opportunity WHERE CloseDate > LAST_MONTH |
THIS_MONTH | - 현재 날짜 기준 달 첫날의 오전 12시부터 1달 | SELECT Id FROM Account WHERE CreatedDate < THIS_MONTH |
NEXT_MONTH | - 현재 날짜 기준 다음달 첫날의 오전 12시부터 1달 | SELECT Id FROM Opportunity WHERE CloseDate = NEXT_MONTH |
LAST_90_DAYS | - 현재 날짜 기준 90일전부터 현재 날짜까지 (범위에는 오늘이 포함, 이 날짜 값을 사용하면 91일 전부터 오늘까지의 기록이 포함) | SELECT Id FROM Account WHERE CreatedDate = LAST_90_DAYS |
NEXT_90_DAYS | - 현재 날짜부터 90일 이후 까지 (범위에는 오늘이 포함) | SELECT Id FROM Opportunity WHERE CloseDate > NEXT_90_DAYS |
LAST_N_DAYS:n | - 사용자가 지정하는 'n'일 전부터 현재 날짜까지 (범위에는 오늘이 포함, 이 날짜 값을 사용하면 n + 1일 전부터 현재 날짜까지의 레코드가 포함) | SELECT Id FROM Account WHERE CreatedDate = LAST_N_DAYS:365 |
NEXT_N_DAYS:n | - 표준 날짜 필터의 경우 현재 날짜부터 사용자가 지정하는 'n'일 후까지 (범위에는 오늘이 포함) - 사용자 정의 필드 필터의 경우 다음 날 오전 12시에 시작하여 다음 n일까지 (범위에는 오늘이 포함되지 않음) |
SELECT Id FROM Opportunity WHERE CloseDate > NEXT_N_DAYS:15 |
N_DAYS_AGO:n | - 현재 날짜로부터 n일 전의 날 오전 12시부터 24시간까지 (범위에는 오늘이 포함되지 않음) | SELECT Id FROM Opportunity WHERE CloseDate = N_DAYS_AGO:25 |
NEXT_N_WEEKS:n | - 현재 주의 다음 주의 첫날 오전 12시부터 7일 동안 n번 계속 | SELECT Id FROM Opportunity WHERE CloseDate > NEXT_N_WEEKS:4 |
LAST_N_WEEKS:n | - 현재 주 이전 n주에 시작된 주의 첫날의 오전 12시부터 현재 주 이전 주의 마지막 날의 오후 11시 59분까지 | SELECT Id FROM Account WHERE CreatedDate = LAST_N_WEEKS:52 |
N_WEEKS_AGO:n | - 현재 주가 시작되기 n주 전에 시작된 주의 첫날 오전 12시부터 7일 동안 | SELECT Id FROM Opportunity WHERE CloseDate = N_WEEKS_AGO:3 |
NEXT_N_MONTHS:n | - 이번 달의 다음 달 1일 오전 12시부터 n번째 달의 말일까지 | SELECT Id FROM Opportunity WHERE CloseDate > NEXT_N_MONTHS:2 |
LAST_N_MONTHS:n | - 이번 달 이전 n개월에 시작된 달의 1일 오전 12시부터 이번 달 이전 달의 마지막 날 오후 11시 59분까지 | SELECT Id FROM Account WHERE CreatedDate = LAST_N_MONTHS:12 |
N_MONTHS_AGO:n | - 이번 달이 시작되기 n개월 전에 시작된 달의 1일 오전 12시부터 해당 달의 모든 날짜 동안 | SELECT Id FROM Opportunity WHERE CloseDate = N_MONTHS_AGO:6 |
THIS_QUARTER | - 현재 분기의 첫째 날 오전 12시부터 해당 분기의 끝까지 | SELECT Id FROM Account WHERE CreatedDate = THIS_QUARTER |
LAST_QUARTER | - 현재 분기 이전 분기의 첫째 날 오전 12시부터 해당 분기가 끝날 때까지 | SELECT Id FROM Account WHERE CreatedDate = LAST_QUARTER |
NEXT_QUARTER | - 현재 분기 이후 해당 분기의 첫째 날 오전 12시부터 해당 분기가 끝날 때까지 | SELECT Id FROM Account WHERE CreatedDate < NEXT_QUARTER |
NEXT_N_QUARTERS:n | - 현재 분기 이후 해당 분기의 첫째 날 오전 12시부터 향후 n분기까지 (범위에는 현재 분기가 포함되지 않음) | SELECT Id FROM Account WHERE CreatedDate < NEXT_N_QUARTERS:2 |
LAST_N_QUARTERS:n | - n 분기 전 분기의 첫날 오전 12시부터 현재 분기 이전 분기의 끝까지 (범위에는 현재 분기가 포함되지 않음) | SELECT Id FROM Account WHERE CreatedDate = LAST_N_QUARTERS:2 |
N_QUARTERS_AGO:n | - 현재 분기 이전 n 분기의 첫 번째 날 오전 12시부터 해당 분기가 끝날 때까지 | SELECT Id FROM Opportunity WHERE CloseDate = N_QUARTERS_AGO:3 |
THIS_YEAR | - 올해 1월 1일 오전 12시부터 올해 12월 31일 말까지 | SELECT Id FROM Opportunity WHERE CloseDate = THIS_YEAR |
LAST_YEAR | - 올해 전년도 1월 1일 오전 12시부터 해당 연도 12월 31일 말까지 | SELECT Id FROM Opportunity WHERE CloseDate > LAST_YEAR |
NEXT_YEAR | - 해당 연도 다음 연도의 1월 1일 오전 12시부터 해당 연도의 12월 31일 말까지 | SELECT Id FROM Opportunity WHERE CloseDate < NEXT_YEAR |
NEXT_N_YEARS:n | - 현재 연도 다음 연도의 1월 1일 오전 12시부터 n번째 연도의 12월 31일 말까지 | SELECT Id FROM Opportunity WHERE CloseDate = NEXT_N_YEARS:5 |
LAST_N_YEARS:n | - n+1년 전 1월 1일 오전 12시에 시작 - 범위는 올해 전년도 12월 31일에 끝 |
SELECT Id FROM Opportunity WHERE CloseDate = LAST_N_YEARS:5 |
N_YEARS_AGO:n | - 현재 연도에서 n년 전의 연도 1월 1일 오전 12시부터 해당 연도의 12월 31일 말까지 | SELECT Id FROM Opportunity WHERE CloseDate = N_YEARS_AGO:2 |
THIS_FISCAL_QUARTER | - 현재 회계 분기의 첫날 오전 12시부터 현재 회계 분기의 마지막 날이 끝날 때까지 계속 - 회계 분기는 설정의 회계 연도 페이지에서 정의 |
SELECT Id FROM Account WHERE CreatedDate = THIS_FISCAL_QUARTER |
LAST_FISCAL_QUARTER | - 현재 회계 분기 이전 회계 분기의 첫째 날 오전 12시부터 해당 회계 분기의 마지막 날까지 - 회계 분기는 설정의 회계 연도 페이지에서 정의 *모바일 사용자 정의 보기를 생성할 때 FISCAL 리터럴 날짜 값은 지원되지 않음 |
SELECT Id FROM Account WHERE CreatedDate > LAST_FISCAL_QUARTER |
NEXT_FISCAL_QUARTER | - 현재 회계 분기 다음 회계 분기의 첫째 날 오전 12시부터 해당 회계 분기의 마지막 날까지(범위에는 현재 분기가 포함되지 않음) - 회계 분기는 설정의 회계 연도 페이지에서 정의 |
SELECT Id FROM Account WHERE CreatedDate < NEXT_FISCAL_QUARTER |
NEXT_N_FISCAL_QUARTERS:n | - 현재 회계 분기 다음 회계 분기의 첫째 날 오전 12시부터 n번째 회계 분기의 마지막 날이 끝날 때까지(범위에는 현재 회계 분기가 포함되지 않음) - 회계 분기는 설정의 회계 연도 페이지에서 정의 |
SELECT Id FROM Account WHERE CreatedDate = NEXT_N_FISCAL_QUARTERS:6 |
LAST_N_FISCAL_QUARTERS:n | - n 회계 분기 전 회계 분기의 첫날 오전 12시부터 이전 회계 분기의 마지막 날이 끝날 때까지(범위에는 현재 회계 분기가 포함되지 않음) - 회계 분기는 설정의 회계 연도 페이지에서 정의 |
SELECT Id FROM Account WHERE CreatedDate > LAST_N_FISCAL_QUARTERS:6 |
N_FISCAL_QUARTERS_AGO:n | 현재 회계 분기 이전 n 회계 분기의 첫 번째 날 오전 12시부터 해당 회계 분기의 마지막 날이 끝날 때까지 | SELECT Id FROM Opportunity WHERE CloseDate = N_FISCAL_QUARTERS_AGO:6 |
THIS_FISCAL_YEAR | - 현재 회계 연도의 첫날 오전 12시부터 회계 연도의 마지막 날이 끝날 때까지 - 회계 분기는 설정의 회계 연도 페이지에서 정의 |
SELECT Id FROM Opportunity WHERE CloseDate = THIS_FISCAL_YEAR |
LAST_FISCAL_YEAR | - 현재 회계연도 이전 회계연도의 첫날 오전 12시부터 해당 회계연도의 마지막 날이 끝날 때까지 - 회계 분기는 설정의 회계 연도 페이지에서 정의 |
SELECT Id FROM Opportunity WHERE CloseDate > LAST_FISCAL_YEAR |
NEXT_FISCAL_YEAR | - 현재 회계연도 다음 회계연도의 첫날 오전 12시부터 해당 회계연도의 마지막 날이 끝날 때까지 계속 - 회계 분기는 설정의 회계 연도 페이지에서 정의 |
SELECT Id FROM Opportunity WHERE CloseDate < NEXT_FISCAL_YEAR |
NEXT_N_FISCAL_YEARS:n | - 현재 회계연도 다음 회계연도의 첫날 오전 12시부터 n번째 회계연도의 마지막 날이 끝날 때까지(범위에는 현재 회계 연도가 포함되지 않음) - 회계 분기는 설정의 회계 연도 페이지에서 정의 |
SELECT Id FROM Opportunity WHERE CloseDate = NEXT_N_FISCAL_YEARS:3 |
LAST_N_FISCAL_YEARS:n | - n 회계연도 전 회계연도의 첫날 오전 12시부터 현재 회계연도 이전 회계연도의 마지막 날이 끝날 때까지(범위에는 현재 회계 연도가 포함되지 않음) - 회계 분기는 설정의 회계 연도 페이지에서 정의 |
SELECT Id FROM Opportunity WHERE CloseDate = LAST_N_FISCAL_YEARS:3 |
N_FISCAL_YEARS_AGO:n | - n 회계연도 전 회계연도의 첫날 오전 12시부터 해당 회계연도의 마지막 날이 끝날 때까지 | SELECT Id FROM Opportunity WHERE CloseDate = N_FISCAL_YEARS_AGO:3 |