날짜 및 시간 표현식

날짜/시간 표현식은 컨텍스트에 따라 DATE, INT, INTERVAL, TIME 또는 TIMESTAMP 유형의 값으로 분석됩니다. 날짜/시간 표현식은 다음 컴포턴트 중 하나 이상을 포함해야 합니다.
  • DATE, INTERVAL, TIME 또는 TIMESTAMP 유형을 기반으로 한 변수
  • EGL이 날짜/시간 변수에 지정할 수 있는 문자열 리터럴 또는 상수("텍스트 유형을 날짜/시간 유형으로 변환" 참조)
  • 날짜/시간 값을 리턴하는 함수 호출. 여기에는 dateTimeLib의 함수 중 다수가 포함됩니다(EGL 라이브러리 dateTimeLib" 참조).

다음 표에는 날짜/시간 표현식에서 유효한 산술 연산의 유형이 요약되어 있습니다. 산술 연산식에는 TIME 변수를 사용할 수 없습니다. 사용된 형식 기호에 대한 설명은 "날짜, 시간 및 시간소인 형식 지정자"를 참조하십시오.

표 1. 날짜/시간 표현식의 산술 연산
피연산자 1의 유형 연산자 피연산자 2의 유형 결과의 유형 주석
DATE - DATE INT INT는 다수의 일 수입니다.
DATE +/- NUMBER DATE NUMBER는 변수, 리터럴 또는 숫자 표현식일 수 있으며 다수의 일 수인 것으로 가정됩니다.
NUMBER + DATE DATE NUMBER는 변수, 리터럴 또는 숫자 표현식일 수 있으며 다수의 일 수인 것으로 가정됩니다.
TIMESTAMP - TIMESTAMP INTERVAL 아래의 "INTERVAL 변수 사용"을 참조하십시오.
DATE - TIMESTAMP INTERVAL 아래의 "INTERVAL 변수 사용"을 참조하십시오.
TIMESTAMP - DATE INTERVAL 아래의 "INTERVAL 변수 사용"을 참조하십시오.
TIMESTAMP +/- INTERVAL TIMESTAMP  
INTERVAL + TIMESTAMP TIMESTAMP  
DATE +/- INTERVAL TIMESTAMP  
INTERVAL + DATE TIMESTAMP  
INTERVAL +/- INTERVAL INTERVAL INTERVAL은 동일한 범위(즉, 월 또는 초 범위)의 INTERVAL이어야 합니다.
INTERVAL *// NUMBER INTERVAL 예를 들어, 3년 3개월의 INTERVAL을 2로 나눌 수 있습니다. 결과는 1년 7개월로 잘립니다.

INTERVAL 변수 사용

여기서 까다로운 개념은 INTERVAL 유형입니다. INTERVAL은 표현식에 TIMESTAMP 또는 INTERVAL이 피연산자 중 하나로 포함되는 경우에만 작동합니다. 실제로는 두 가지 다른 버전의 INTERVAL 유형이 있습니다. 한 유형은 월 범위 간격(1개월보다 긴 간격)을 저장하고 다른 유형은 초 범위 간격(1개월 미만의 간격)을 저장합니다. INTERVAL 변수를 선언할 때 형식 패턴을 제공해야 하며 해당 형식은 INTERVAL이 월 범위와 초 범위 중 어느 것인지를 EGL에 알려야 합니다.

월 범위 INTERVAL에 대해 올바른 형식의 예제는 다음과 같습니다.
diff01 INTERVAL("yyyy");
diff02 INTERVAL("MM");
diff03 INTERVAL("yyyyMM");
초 범위 INTERVAL에 대해 올바른 형식의 예제는 다음과 같습니다.
diff04 INTERVAL ("ddhhmmssffff");
diff05 INTERVAL ("hhmmss");
diff06 INTERVAL ("ddhhmm");
diff07 INTERVAL ("ss");
두 형식을 결합할 수 없으므로 다음과 같은 형식은 올바르지 않습니다.
diff08 INTERVAL ("yyyyMMdd");    // illegal
diff09 INTERVAL ("MMddhhmmss");  // illegal
작동 중인 INTERVAL의 두 가지 예제는 다음과 같습니다.
//month-span interval 
diff01 INTERVAL ("yyyyMM");
t1 TIMESTAMP ("yyyyMM") = "200504";
t2 TIMESTAMP ("yyyyMM") = "200604";

diff01 = t2 - t1;
// diff01 is "+000100" (1 year)

// second-span interval
diff02 INTERVAL ("ddhhmmss");
t3 TIMESTAMP ("yyyyMMddhhmm") = "200604201027";
t4 TIMESTAMP ("yyyyMMddhhmm") = "200604201555";

diff02 = t4 - t3;
// diff02 is "+00052800" (5 hours, 28 mins)

호환성 고려사항

표 2. 호환성 고려사항
플랫폼 문제
JavaScript 생성 ANY, BIGINT, BIN(소수 자리가 없는 경우에만), 부울, DataItem, DATE, DECIMAL, 위임, 사전, FLOAT, INT, NUM, NUMBER, SMALLFLOAT, SMALLINT, STRING(크기 제한이 없는 경우에만), TIME, TIMESTAMP, NUM, MONEY, 서비스 파트, 인터페이스 파트, 외부 유형(스테레오타입 JavaScript), 지원되는 유형의 배열, 구조화되지 않은 기본, 예외 및 SQL 레코드 파트 유형이 지원됩니다.

ArrayDictionary, BIN(소수 자리 포함), BLOB, CHAR, CLOB, DBCHAR, HEX, INTERVAL, MBCHAR, NUMC, STRING(크기 제한 있음), PACF, UNICODE 및 구조화된 레코드 파트 유형은 지원되지 않습니다.