다음을 통해 공유


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

날짜, 시간 및 타임스탬프 리터럴에 대한 이스케이프 구문은 다음과 같습니다

{ -type ' value '}

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

리터럴 형식 의미 에 대한 형식
d 날짜 yyyy-mm-dd
t 시간* hh:mm:ss[1]
ts 타임스탬프 yyyy-mm-dd hh:mm:ss[.f...][1]

[1] 초 구성 요소를 포함하는 시간 혹은 타임스탬프 간격 리터럴의 소수점 오른쪽에 있는 자릿수는 SQL_DESC_PRECISION 설명자 필드에 포함된 대로 초 정밀도에 따라 달라지는 것입니다. (자세한 정보는 .SQLSetDescField를 참고해 주세요.)

날짜, 시간 및 타임스탬프 이스케이프 시퀀스에 대한 자세한 정보는 부록 C: SQL 문법의 날짜, 시간 및 타임스탬프 이스케이프 시퀀스를 참고해 주세요.

예를 들면, 다음의 SQL 문은 모두 Orders 테이블에서 판매 주문 1023의 공개 날짜를 업데이트한 것입니다. 첫 번째 문은 이스케이프 시퀀스 구문을 사용합니다. 두 번째 문은 DATE 열에 오라클 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);  

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

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

드라이버가 간격 리터럴에 대한 개방형 데이터베이스 연결 이스케이프 시퀀스를 지원하는지 여부를 확인하기 위해 애플리케이션은 SQLGetTypeInfo를 호출해 주세요. 데이터 소스가 날짜 및 시간 데이터 형식을 지원하는 경우에는 해당 이스케이프 시퀀스도 지원해야 합니다.

데이터 소스는 날짜 및 시간 간격 리터럴에 대한 개방형 데이터베이스 연결 이스케이프 시퀀스와 다른 ANSI SQL-92 사양에 정의 내려진 날짜 및 시간 리터럴을 지원할 수도 있습니다. 데이터 소스가 ANSI 리터럴을 지원하는지 여부를 확인하기 위해 애플리케이션은 SQL_ANSI_SQL_DATETIME_LITERALS 옵션을 사용하여 SQLGetInfo를 호출해 주세요.