날짜, 시간, 타임스탬프 리터럴

날짜, 시간 및 타임스탬프 리터럴의 이스케이프 시퀀스는 다음과 같습니다.

{-type'value'}

여기서 리터럴 형식 은 다음 표에 나열된 값 중 하나입니다.

literal-type 의미 값 형식
d 날짜 yyyy-mm-dd
t 시간* hh:mm:ss[1]
Ts 타임스탬프 yyyy-mm-ddhh:mm:ss[.f...] [1]

[1] 초 구성 요소를 포함하는 시간 또는 타임스탬프 간격 리터럴의 소수점 오른쪽에 있는 자릿수는 SQL_DESC_PRECISION 설명자 필드에 포함된 초 정밀도에 따라 달라집니다. (자세한 내용은 를 참조하세요 .SQLSetDescField.)

날짜, 시간 및 타임스탬프 이스케이프 시퀀스에 대한 자세한 내용은 부록 C: SQL 문법의 날짜, 시간 및 타임스탬프 이스케이프 시퀀스를 참조하세요.

예를 들어 다음 SQL 문은 모두 Orders 테이블에서 판매 주문 1023의 공개 날짜를 업데이트합니다. 첫 번째 문은 이스케이프 시퀀스 구문을 사용합니다. 두 번째 문은 DATE 열에 Oracle Rdb 네이티브 구문을 사용하며 상호 운용할 수 없습니다.

UPDATE Orders SET OpenDate={d '1995-01-15'} WHERE OrderID=1023  
UPDATE Orders SET OpenDate='15-Jan-1995' WHERE OrderID=1023  

날짜, 시간 또는 타임스탬프 리터럴의 이스케이프 시퀀스는 날짜, 시간 또는 타임스탬프 매개 변수에 바인딩된 문자 변수에도 배치할 수 있습니다. 예를 들어 다음 코드는 문자 변수에 바인딩된 날짜 매개 변수를 사용하여 Orders 테이블에서 판매 주문 1023의 열린 날짜를 업데이트합니다.

SQLCHAR      OpenDate[56]; // The size of a date literal is 55.  
SQLINTEGER   OpenDateLenOrInd = SQL_NTS;  
  
// Bind the parameter.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_TYPE_DATE, 0, 0,  
                  OpenDate, sizeof(OpenDate), &OpenDateLenOrInd);  
  
// Place the date in the OpenDate variable. In addition to the escape  
// sequence shown, it would also be possible to use either of the  
// strings "{d '1995-01-15'}" and "15-Jan-1995", although the latter  
// is data source-specific.  
strcpy_s( (char*) OpenDate, _countof(OpenDate), "{d '1995-01-15'}");  
  
// Execute the statement.  
SQLExecDirect(hstmt, "UPDATE Orders SET OpenDate=? WHERE OrderID = 1023", SQL_NTS);  

그러나 일반적으로 매개 변수를 날짜 구조에 직접 바인딩하는 것이 더 효율적입니다.

SQL_DATE_STRUCT   OpenDate;  
SQLINTEGER        OpenDateInd = 0;  
  
// Bind the parameter.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_TYPE_DATE, SQL_TYPE_DATE, 0, 0,  
                  &OpenDate, 0, &OpenDateLen);  
  
// Place the date in the dsOpenDate structure.  
OpenDate.year = 1995;  
OpenDate.month = 1;  
OpenDate.day = 15;  
  
// Execute the statement.  
SQLExecDirect(hstmt, "UPDATE Employee SET OpenDate=? WHERE OrderID = 1023", SQL_NTS);  

드라이버가 날짜, 시간 또는 타임스탬프 리터럴에 대한 ODBC 이스케이프 시퀀스를 지원하는지 여부를 확인하기 위해 애플리케이션은 SQLGetTypeInfo를 호출합니다. 데이터 원본이 날짜, 시간 또는 타임스탬프 데이터 형식을 지원하는 경우 해당 이스케이프 시퀀스도 지원해야 합니다.

데이터 원본은 날짜, 시간 또는 타임스탬프 리터럴에 대한 ODBC 이스케이프 시퀀스와 다른 ANSI SQL-92 사양에 정의된 날짜/시간 리터럴을 지원할 수도 있습니다. 데이터 원본이 ANSI 리터럴을 지원하는지 여부를 확인하기 위해 애플리케이션은 SQL_ANSI_SQL_DATETIME_LITERALS 옵션을 사용하여 SQLGetInfo를 호출합니다.

드라이버가 간격 리터럴에 대한 ODBC 이스케이프 시퀀스를 지원하는지 여부를 확인하기 위해 애플리케이션은 SQLGetTypeInfo를 호출합니다. 데이터 원본이 datetime 간격 데이터 형식을 지원하는 경우 해당 이스케이프 시퀀스도 지원해야 합니다.

데이터 원본은 ANSI SQL-92 사양에 정의된 날짜/시간 리터럴을 지원할 수도 있습니다. 이 리터럴은 날짜/시간 간격 리터럴의 ODBC 이스케이프 시퀀스와 다릅니다. 데이터 원본이 ANSI 리터럴을 지원하는지 여부를 확인하기 위해 애플리케이션은 SQL_ANSI_SQL_DATETIME_LITERALS 옵션을 사용하여 SQLGetInfo를 호출합니다.