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);