다음을 통해 공유


C-SQL: 일별 간격

일별 간격 ODBC C 데이터 형식의 식별자는 다음과 같습니다.

SQL_C_INTERVAL_DAY

SQL_C_INTERVAL_HOUR

SQL_C_INTERVAL_MINUTE

SQL_C_INTERVAL_SECOND

SQL_C_INTERVAL_DAY_TO_HOUR

SQL_C_INTERVAL_DAY_TO_MINUTE

SQL_C_INTERVAL_DAY_TO_SECOND

SQL_C_INTERVAL_HOUR_TO_MINUTE

SQL_C_INTERVAL_HOUR_TO_SECOND

SQL_C_INTERVAL_MINUTE_TO_SECOND

다음 표에서는 간격 C 데이터가 변환될 수 있는 ODBC SQL 데이터 형식을 보여줍니다. 테이블의 열 및 용어에 대한 설명은 C에서 SQL 데이터 형식으로 데이터 변환을 참조 하세요.

SQL 형식 식별자 테스트 SQLSTATE
SQL_CHAR[a]

SQL_VARCHAR[a]

SQL_LONGVARCHAR[a]
열 바이트 길이 >= 문자 바이트 길이

열 바이트 길이 < 문자 바이트 길이[a]

데이터 값이 유효한 간격 리터럴이 아닙니다.
해당 없음

22001

22015
SQL_WCHAR[a]

SQL_WVARCHAR[a]

SQL_WLONGVARCHAR[a]
열 문자 길이 >= 데이터의 문자 길이

데이터의 열 문자 길이 < 문자 길이[a]

데이터 값이 유효한 간격 리터럴이 아닙니다.
해당 없음

22001

22015
SQL_TINYINT[b]

SQL_SMALLINT[b] SQL_INTEGER[b]

SQL_BIGINT[b] SQL_NUMERIC[b]

SQL_DECIMAL[b]
단일 필드 간격을 변환해도 전체 자릿수가 잘림되지 않았습니다.

변환 결과 전체 자릿수가 잘림
해당 없음

22003
SQL_INTERVAL_DAY

SQL_INTERVAL_HOUR

SQL_INTERVAL_MINUTE

SQL_INTERVAL_SECOND

SQL_INTERVAL_DAY_TO_HOUR

SQL_INTERVAL_DAY_TO_MINUTE

SQL_INTERVAL_DAY_TO_SECOND

SQL_INTERVAL_HOUR_TO_MINUTE

SQL_INTERVAL_HOUR_TO_SECOND

SQL_INTERVAL_MINUTE_TO_SECOND
필드 잘림 없이 데이터 값이 변환되었습니다.

변환 중에 하나 이상의 데이터 값 필드가 잘렸습니다.
해당 없음

22015

[a] 모든 C 간격 데이터 형식을 문자 데이터 형식으로 변환할 수 있습니다.

[b] 간격 구조의 형식 필드가 단일 필드(SQL_DAY, SQL_HOUR, SQL_MINUTE 또는 SQL_SECOND)인 경우 간격 C 형식을 정확한 숫자(SQL_TINYINT, SQL_SMALLINT, SQL_INTEGER, SQL_BIGINT, SQL_DECIMAL 또는 SQL_NUMERIC)로 변환할 수 있습니다.

간격 C 형식의 기본 변환은 해당 일 시간 간격 SQL 형식으로 변환됩니다.

드라이버는 간격 C 데이터 형식에서 데이터를 변환할 때 길이/표시기 값을 무시하고 데이터 버퍼의 크기가 간격 C 데이터 형식의 크기라고 가정합니다. 길이/표시기 값은 SQLPutData의 StrLen_or_Ind 인수와 SQLBindParameter의 StrLen_or_IndPtr 인수로 지정된 버퍼에 전달됩니다. 데이터 버퍼는 SQLPutData의 DataPtr 인수와 SQLBindParameter의 ParameterValuePtr 인수로 지정됩니다.

다음 예제에서는 SQL_INTERVAL_STRUCT 구조에 저장된 간격 C 데이터를 데이터베이스 열로 보내는 방법을 보여 줍니다. 간격 구조에는 DAY_TO_SECOND 간격이 포함됩니다. SQL_INTERVAL_DAY_TO_MINUTE 형식의 데이터베이스 열에 저장됩니다.

SQL_INTERVAL_STRUCT is;  
SQLINTEGER cbValue;  
  
// Initialize the interval struct to contain the DAY_TO_SECOND  
// interval "154 days, 22 hours, 44 minutes, and 10 seconds"  
is.intval.day_second.day      = 154;  
is.intval.day_second.hour     = 22;  
is.intval.day_second.minute   = 44;  
is.intval.day_second.second   = 10;  
is.interval_sign              = SQL_FALSE;  
  
// Bind the dynamic parameter  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_INTERVAL_DAY_TO_SECOND,  
                  SQL_INTERVAL_DAY_TO_MINUTE, 0, 0, &is,  
                  sizeof(SQL_INTERVAL_STRUCT), &cbValue);  
  
// Execute an insert statement; "interval_column" is a column  
// whose data type is SQL_INTERVAL_DAY_TO_MINUTE.  
SQLExecDirect(hstmt,"INSERT INTO table(interval_column) VALUES (?)",SQL_NTS);