작성일자 : 2023-11-23
Ver 0.1.1
0. Intro
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 |