date()
문자열을 지정한 형식에 따라 날짜 타입으로 변환합니다.
문법
매개변수
DATE_EXPR- 날짜 타입으로 변환할 문자열 또는 식.
DATE_FMT- 자바 SimpleDateFormat 클래스에 정의된 날짜 파싱 형식 문자열. 큰따옴표로 감싼 문자열 상수 또는 미리 바인딩된 쿼리 매개변수만 지정할 수 있으며, 날짜 지시자를 하나 이상 포함해야 합니다. 다음과 같은 날짜 지시자를 사용할 수 있습니다.
날짜 지시자
지시자 설명 예제 G 기원 전/후 AD y 달력 기준 연도 2025 ( yyyy); 25 (yy)M 월 July ( MMMM); Jul (MMM); 07 (MM), 7 (M)w 연 기준 몇 번째 주 27 (해당 연도의 27번째 주) W 월 기준 몇 번째 주 2 (해당 월의 두 번째 주) D 연 단위 일 10 d 월 단위 일 189 E 요일 Tuesday ( EEEE); Tue (E,EE,EEE)F 월 기준 몇 번째 요일 2 (해당 월의 두 번째 요일) u 요일 숫자(1=월요일, …, 7=일요일) 1 a 오전/오후 PM H 시간(0-23) 0 k 시간(1-24) 24 K 오전/오후 시간 (0-11) 0 h 오전/오후 시간 (1-12) 12 m 분 30 s 초 55 S 밀리초 978 z 시간대(일반 표기) Pacific Standard Time; PST Z 시간대(RFC 822 표기) -0800 X 시간대(ISO 8601 표기) -08;-0800;08:00 LOCALE- ISO 639에 지정된 2자리 또는 3자리 로케일 코드 (기본값:
en). 로케일 코드는 ISO 639 코드 목록을 참고하세요.
설명
date() 함수는 문자열을 DATE_FMT에 지정된 형식으로 파싱하여 날짜 타입으로 반환합니다. DATE_EXPR이 null이거나 빈 문자열이면 null을 반환합니다. 파싱에 실패한 경우에도 null을 반환합니다. 배열이나 리스트를 전달하면 각 요소에 대해 재귀적으로 변환을 수행합니다.
로그프레소는 날짜 값의 범위를 엄격하게 검사하지 않습니다. 예를 들어 13월이 입력되면 다음 연도의 1월로 처리하고, 32일이 입력되면 다음 달로 넘어가는 방식으로 계산합니다.
날짜 형식은 쿼리를 파싱하는 시점에 한 번만 컴파일되어 모든 레코드에 재사용됩니다. 따라서 DATE_FMT에는 파싱 시점에 값이 확정되는 문자열만 지정할 수 있습니다. 큰따옴표로 감싼 문자열 상수("yyyy-MM-dd")와, set 명령어·프로시저 인자·워크플로 입력 매개변수로 미리 바인딩된 쿼리 매개변수($() 함수로 참조)를 사용할 수 있습니다. 필드 참조, concat() 같은 함수 호출, 숫자나 산술식을 지정하면 쿼리가 실행되기 전에 오류 코드 90822로 실패합니다. 형식 문자열을 따옴표 없이(yyyy-MM-dd) 또는 작은따옴표('yyyy-MM-dd')로 입력하면 필드 참조로 해석되므로 마찬가지로 90822 오류가 발생합니다. 이 검사는 4.0 계열의 4.0.2609.0 버전부터 적용되며, 5.0 계열(5.0.2605.2까지)에는 아직 적용되지 않았습니다.
날짜 지시자가 하나도 없는 형식 문자열("", "2013")은 어떤 입력에서도 날짜 값을 추출할 수 없으므로 오류 코드 90820으로 거부됩니다. 작은따옴표로 감싼 문자는 리터럴로 취급되어 지시자로 인정되지 않습니다. 예를 들어 "yyyy'년'"은 yyyy가 지시자이므로 유효하지만, "'year'"는 유효하지 않습니다. 이 검사도 4.0 계열의 4.0.2609.0 버전부터 적용되며, 5.0 계열(5.0.2605.2까지)에는 아직 적용되지 않았습니다.
오류 코드
| 오류 코드 | 설명 |
|---|---|
| 90820 | 날짜 형식 문자열이 잘못되었거나 날짜 지시자를 포함하지 않은 경우 |
| 90821 | 로케일이 문자열 상수가 아닌 경우 |
| 90822 | 날짜 포맷 매개변수가 문자열 상수가 아닌 경우 |
사용 예
-
기본 날짜 문자열 변환
json "{'val': '2024-06-10 00:30:55.978'}" | eval result = date(val, "yyyy-MM-dd HH:mm:ss.SSS") | # result: 2024-06-10 00:30:55+0900 -
ISO 8601 형식 변환
json "{'val': '2024-01-30T10:11:12.123Z'}" | eval result = date(val, "yyyy-MM-dd'T'HH:mm:ss.SSSX") | # result: 2024-01-30 19:11:12+0900 -
한국어 로케일을 사용한 날짜 변환
json "{'val': '6월 1 토요일 2024 12:34:56'}" | eval result = date(val, "MMM dd EEEE yyyy HH:mm:ss", "ko") | # result: 2024-06-01 12:34:56+0900 -
NULL 입력
json "{'val': null}" | eval result = date(val, "yyyy-MM-dd") | # result: null -
쿼리 매개변수로 날짜 형식 지정
set fmt = "yyyy-MM-dd HH:mm:ss" | json "{'val': '2013-06-10 00:30:55'}" | eval result = date(val, $("fmt")) | # result: 2013-06-10 00:30:55+0900set 명령어로 미리 바인딩한 쿼리 매개변수는 파싱 시점에 값이 확정되므로
DATE_FMT에 사용할 수 있습니다. -
포맷 매개변수에 문자열 상수가 아닌 값을 지정한 경우 — 파싱 오류
json "{'val': '2013-06-10 00:30:55'}" | eval result = date(val, 20130610)숫자(
20130610), 산술식(1+1), 필드 참조,concat("yyyy-MM", "-dd")같은 평가식을DATE_FMT에 지정하면 쿼리 실행 전에 파싱 오류(오류 코드 90822)가 발생합니다. 오류 안내에는 잘못 입력한 값이 함께 표시되므로 어느 인자를 고쳐야 하는지 바로 확인할 수 있습니다. 위 쿼리는 "date() 함수의 날짜 포맷 매개변수는 문자열 상수만 허용됩니다. (입력값: 20130610)"이라는 안내를 반환합니다. -
날짜 지시자가 없는 포맷을 지정한 경우 — 파싱 오류
json "{'val': '2013-06-10 00:30:55'}" | eval result = date(val, "2013")"2013"에는 날짜 지시자가 없어 날짜 값을 추출할 수 없으므로 쿼리 실행 전에 파싱 오류(오류 코드 90820)가 발생합니다.
변경 이력
| 대상 | 도입 릴리스 |
|---|---|
date() 함수 | 소나 4.0 이전 버전 |
| 포맷 매개변수가 문자열 상수가 아닐 때 파싱 오류(90822) | 4.0.2609.0 (5.0 계열은 5.0.2605.2까지 미적용) |
| 날짜 지시자가 없는 포맷 문자열에 대한 파싱 오류(90820) | 4.0.2609.0 (5.0 계열은 5.0.2605.2까지 미적용) |