C para SQL: intervalos de tempo-dia
Os identificadores para os tipos de dados ODBC C de intervalo diurno são:
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
A tabela a seguir mostra os tipos de dados SQL ODBC para os quais os dados do intervalo C podem ser convertidos. Para obter uma explicação das colunas e dos termos na tabela, consulte Convertendo dados de C para tipos de dados SQL.
Identificador de tipo SQL | Teste | SQLSTATE |
---|---|---|
SQL_CHAR[a] SQL_VARCHAR[a] SQL_LONGVARCHAR[a] |
Comprimento do byte >da coluna = Comprimento do byte do caractere Comprimento do byte < da coluna Comprimento do byte do caractere[a] O valor dos dados não é um literal de intervalo válido |
n/d 22001 22015 |
SQL_WCHAR[a] SQL_WVARCHAR[a] SQL_WLONGVARCHAR[a] |
Comprimento >do caractere da coluna = comprimento do caractere de dados Comprimento do caractere de coluna < Comprimento do caractere de dados[a] O valor dos dados não é um literal de intervalo válido |
n/d 22001 22015 |
SQL_TINYINT[b] SQL_SMALLINT[b] SQL_INTEGER[b] SQL_BIGINT[b] SQL_NUMERIC[b] SQL_DECIMAL[b] |
A conversão de um intervalo de campo único não resultou em truncamento de dígitos inteiros A conversão resultou em truncamento de dígitos inteiros |
n/d 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 |
O valor dos dados foi convertido sem truncamento de nenhum campo Um ou mais campos de valor de dados foram truncados durante a conversão |
n/d 22015 |
[a] Todos os tipos de dados de intervalo C podem ser convertidos em um tipo de dados de caractere.
[b] Se o campo de tipo na estrutura de intervalo for tal que o intervalo for um único campo (SQL_DAY, SQL_HOUR, SQL_MINUTE ou SQL_SECOND), o tipo de intervalo C poderá ser convertido em qualquer campo numérico exato (SQL_TINYINT, SQL_SMALLINT, SQL_INTEGER, SQL_BIGINT, SQL_DECIMAL ou SQL_NUMERIC).
A conversão padrão de um tipo C de intervalo é para o tipo SQL de intervalo de dia correspondente.
O driver ignora o valor de comprimento/indicador ao converter dados do tipo de dados do intervalo C e pressupõe que o tamanho do buffer de dados é o tamanho do tipo de dados C do intervalo. O valor de comprimento/indicador é passado no argumento StrLen_or_Ind em SQLPutData e no buffer especificado com o argumento StrLen_or_IndPtr em SQLBindParameter. O buffer de dados é especificado com o argumento DataPtr em SQLPutData e o argumento ParameterValuePtr em SQLBindParameter.
O exemplo a seguir demonstra como enviar dados de intervalo C armazenados na estrutura SQL_INTERVAL_STRUCT para uma coluna de banco de dados. A estrutura de intervalo contém um intervalo de DAY_TO_SECOND; ele será armazenado em uma coluna de banco de dados do tipo 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);