- 카테고리:
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 절에는 조각의 시작과 조각의 끝이 모두 필요합니다.