- 카테고리:
TIME_SLICE¶
조각의 길이가 표준 시간 단위(분, 시간, 일 등)의 배수인 시간 “조각”의 시작 또는 끝을 계산합니다.
이 함수는 데이터를 분류할 수 있는 고정 너비 “버킷”의 시작 및 종료 시간을 계산하는 데 사용할 수 있습니다.
- 참고 항목:
구문¶
TIME_SLICE( <date_or_time_expr> , <slice_length> , <date_or_time_part> [ , <start_or_end> ] )
인자¶
필수:
- date_or_time_expr
- 이 함수는 이 날짜 또는 시간을 포함하는 조각의 시작 또는 끝을 반환합니다. 식은 DATE 또는 TIMESTAMP_NTZ 형식이어야 합니다. 
- slice_length
- 이는 조각의 너비, 즉 조각에 포함된 시간 단위 수를 나타냅니다. 예를 들어, 단위가 MONTH이고 - slice_length가 2이면 각 조각은 2개월 너비입니다.- slice_length는 1 이상의 정수여야 합니다.
- date_or_time_part
- 조각 길이의 시간 단위입니다. 값은 아래 나열된 값 중 하나를 포함하는 문자열이어야 합니다. - 입력 식이 DATE인 경우: YEAR, QUARTER, MONTH, WEEK, DAY. 
- 입력 식이 TIMESTAMP_NTZ인 경우: YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND. 
 - 값은 대/소문자를 구분하지 않습니다. 
선택 사항:
- start_or_end
- 이는 조각의 시작 또는 끝이 반환되어야 하는지 여부를 결정하는 선택적 상수 매개 변수입니다. - 지원되는 값은 ‘START’ 또는 ‘END’입니다 값은 대/소문자를 구분하지 않습니다. - 기본값은 ‘START’입니다. 
반환¶
반환 값의 데이터 타입은 입력 date_or_time_expr 의 데이터 타입(즉, TIMESTAMP_NTZ 또는 DATE)과 동일합니다.
사용법 노트¶
- 모든 조각은 1970년 1월 1일 자정(1970-01-01 00:00:00)을 기준으로 정렬됩니다. - 대부분의 조각은 1970년 1월 1일을 기준으로 조각 길이의 정수 배수에서 시작합니다. 예를 들어, 조각 길이를 15년으로 선택하면 각 조각은 다음 경계 중 하나에서 시작됩니다. - 1970년 1월 1일. 
- 1985년 1월 1일. 
- 2000년 1월 1일. 
- 2015년 1월 1일. 
- 등. 
 - 1970년 1월 1일 이전 날짜도 유효합니다. 예를 들어, 15년 조각은 1955년 1월 1일에 시작할 수 있습니다. - 한 가지 예외는, 주 단위로 측정된 조각의 경우, 조각의 시작이 1970년 1월 1일을 포함하는 주 의 시작에 맞춰 정렬된다는 것입니다. 1970년 1월 1일은 목요일이었습니다. 예를 들어, WEEK_START 세션 매개 변수가 달력 주가 월요일에 시작하도록 지정하고 조각이 2주인 경우, 조각은 다음 경계 중 하나에서 시작됩니다. - 1969년 12월 29일(월요일). 
- 1970년 1월 12일(월요일). 
- 1970년 1월 25일(월요일). 
- 등. 
 - 달력 주가 일요일에 시작하는 경우, 조각은 다음 날짜에 시작됩니다. - 1969년 12월 28일(일요일). 
- 1970년 1월 11일(일요일). 
- 1970년 1월 25일(일요일). 
- 등. 
 - 달력 주를 처리하는 방법(예 포함)에 대한 자세한 내용은 달력상의 주 및 요일 을 참조하십시오. 
- TIME_SLICE에 대한 매개 변수는 DATE 또는 TIMESTAMP_NTZ 형식이어야 하지만, 캐스팅을 사용하여 TIMESTAMP_LTZ 값을 처리할 수 있습니다. TIMESTAMP_LTZ 값의 경우, 먼저 입력을 TIMESTAMP_NTZ로 캐스팅한 다음, TIMESTAMP_LTZ로 다시 캐스팅합니다. 그러나 이 경우, 일광 절약 시간제 경계를 가로지르는 조각은 일광 절약 시간제 경계를 가로지르지 않는 조각보다 1시간 더 길거나 1시간 더 짧을 수 있습니다. 
- 각 조각의 끝은 다음 조각의 시작과 동일합니다. 예를 들어, 조각이 2개월이고 조각의 시작이 2019-01-01이면 조각의 끝은 2019-02-28이 아니라 2019-03-01이 됩니다. 즉, 조각에는 시작보다 크거나 같고 끝보다 작은(그러나 같지는 않은) 날짜 또는 타임스탬프가 포함됩니다. 
예¶
날짜가 포함된 4개월 조각의 시작과 끝을 찾습니다.
SELECT '2019-02-28'::DATE AS "DATE", TIME_SLICE("DATE", 4, 'MONTH', 'START') AS "START OF SLICE", TIME_SLICE("DATE", 4, 'MONTH', 'END') AS "END OF SLICE"; +------------+----------------+--------------+ | DATE | START OF SLICE | END OF SLICE | |------------+----------------+--------------| | 2019-02-28 | 2019-01-01 | 2019-05-01 | +------------+----------------+--------------+
두 개의 타임스탬프에 해당하는 8시간 조각의 시작을 찾습니다.
SELECT '2019-02-28T01:23:45.678'::TIMESTAMP_NTZ AS "TIMESTAMP 1", '2019-02-28T12:34:56.789'::TIMESTAMP_NTZ AS "TIMESTAMP 2", TIME_SLICE("TIMESTAMP 1", 8, 'HOUR') AS "SLICE FOR TIMESTAMP 1", TIME_SLICE("TIMESTAMP 2", 8, 'HOUR') AS "SLICE FOR TIMESTAMP 2"; +-------------------------+-------------------------+-------------------------+-------------------------+ | TIMESTAMP 1 | TIMESTAMP 2 | SLICE FOR TIMESTAMP 1 | SLICE FOR TIMESTAMP 2 | |-------------------------+-------------------------+-------------------------+-------------------------| | 2019-02-28 01:23:45.678 | 2019-02-28 12:34:56.789 | 2019-02-28 00:00:00.000 | 2019-02-28 08:00:00.000 | +-------------------------+-------------------------+-------------------------+-------------------------+
날짜 또는 타임스탬프를 기반으로 데이터를 “버킷”으로 그룹화합니다(예: 데이터를 2주 너비의 버킷으로 그룹화).
이 예에서는 아래에 만들어진 테이블과 데이터를 사용합니다.
CREATE TABLE accounts (ID INT, billing_date DATE, balance_due NUMBER(11, 2)); INSERT INTO accounts (ID, billing_date, balance_due) VALUES (1, '2018-07-31', 100.00), (2, '2018-08-01', 200.00), (3, '2018-08-25', 400.00);이 쿼리는 버킷 데이터를 보여줍니다.
SELECT TIME_SLICE(billing_date, 2, 'WEEK', 'START') AS "START OF SLICE", TIME_SLICE(billing_date, 2, 'WEEK', 'END') AS "END OF SLICE", COUNT(*) AS "NUMBER OF LATE BILLS", SUM(balance_due) AS "SUM OF MONEY OWED" FROM accounts WHERE balance_due > 0 -- bill hasn't yet been paid GROUP BY "START OF SLICE", "END OF SLICE"; +----------------+--------------+----------------------+-------------------+ | START OF SLICE | END OF SLICE | NUMBER OF LATE BILLS | SUM OF MONEY OWED | |----------------+--------------+----------------------+-------------------| | 2018-07-23 | 2018-08-06 | 2 | 300.00 | | 2018-08-20 | 2018-09-03 | 1 | 400.00 | +----------------+--------------+----------------------+-------------------+컴파일러는 GROUP BY 절이 프로젝션 절의 모든 비집계 식을 포함할 것으로 예상하기 때문에 GROUP BY 절에는 조각의 시작과 조각의 끝이 모두 필요합니다.