Compartilhar via


SQL para C: intervalos de tempo-dia

Os identificadores para os tipos de dados SQL ODBC de intervalo de dia são os seguintes:

  • SQL_INTERVAL_DAY
  • SQL_INTERVAL_DAY_TO_MINUTE
  • SQL_INTERVAL_HOUR
  • SQL_INTERVAL_DAY_TO_SECOND
  • SQL_INTERVAL_MINUTE
  • SQL_INTERVAL_HOUR_TO_MINUTE
  • SQL_INTERVAL_SECOND
  • SQL_INTERVAL_HOUR_TO_SECOND
  • SQL_INTERVAL_DAY_TO_HOUR
  • SQL_INTERVAL_MINUTE_TO_SECOND

A tabela a seguir mostra os tipos de dados ODBC C para os quais os dados SQL de intervalo de dia podem ser convertidos. Para obter uma explicação das colunas e dos termos na tabela, consulte Convertendo dados de tipos de dados SQL para C.

Identificador de tipo C Teste *TargetValuePtr *Strlen_or_indptr SQLSTATE
Todos os tipos de intervalo C diurno Parte dos campos à direita não truncada

Parte dos campos à direita truncada

A precisão principal do destino não é grande o suficiente para manter os dados da origem
Dados

Dados truncados

Indefinido
Comprimento dos dados

Comprimento dos dados

Indefinido
n/d

01S07

22015
SQL_C_STINYINT[b] SQL_C_UTINYINT[b] SQL_C_USHORT[b] SQL_C_SHORT[b] SQL_C_SLONG[b] SQL_C_ULONG[b] SQL_C_NUMERIC[b] SQL_C_BIGINT[b] A precisão do intervalo era um único campo e os dados foram convertidos sem truncamento

A precisão do intervalo era um único campo e fracionária truncada

A precisão do intervalo era um único campo e truncada inteira

A precisão do intervalo não era um único campo
Dados

Dados truncados

Dados truncados

Indefinido
Tamanho do tipo de dados C

Comprimento dos dados

Comprimento dos dados

Tamanho do tipo de dados C
n/d

01S07

22003

07006
SQL_C_BINARY Comprimento de bytes de dados <= BufferLength

Comprimento de byte de buffer de dadosLength>
Dados

Indefinido
Comprimento dos dados

Indefinido
n/d

22003
SQL_C_CHAR BufferLength de comprimento <de byte de caractere

Número de dígitos inteiros (em vez de fracionários<) BufferLength

Número de dígitos inteiros (em vez de fracionários >) = BufferLength
Dados

Dados truncados

Indefinido
Tamanho do tipo de dados C

Tamanho do tipo de dados C

Indefinido
n/d

01004

22003
SQL_C_WCHAR BufferLength de comprimento de caractere <

Número de dígitos inteiros (em vez de fracionários<) BufferLength

Número de dígitos inteiros (em vez de fracionários >) = BufferLength
Dados

Dados truncados

Indefinido
Tamanho do tipo de dados C

Tamanho do tipo de dados C

Indefinido
n/d

01004

22003

[a] Um tipo SQL de intervalo de dia pode ser convertido em qualquer tipo C de intervalo de dia.

[b] Se a precisão do intervalo for um único campo (um de DAY, HOUR, MINUTE ou SECOND), o tipo SQL de intervalo poderá ser convertido em qualquer numérico exato (SQL_C_STINYINT, SQL_C_UTINYINT, SQL_C_USHORT, SQL_C_SHORT, SQL_C_SLONG, SQL_C_ULONG ou SQL_C_NUMERIC).

A conversão padrão de um tipo SQL de intervalo é para o tipo de dados de intervalo C correspondente. Em seguida, o aplicativo associa a coluna ou o parâmetro (ou define o campo SQL_DESC_DATA_PTR no registro apropriado do ARD) para apontar para a estrutura inicializada SQL_INTERVAL_STRUCT (ou passa um ponteiro para a estrutura SQL_ INTERVAL_STRUCT como o argumento TargetValuePtr em uma chamada para SQLGetData).

O exemplo a seguir demonstra como transferir dados de uma coluna do tipo SQL_INTERVAL_DAY_TO_MINUTE para a estrutura SQL_INTERVAL_STRUCT de modo que ele volte como um intervalo de DAY_TO_HOUR.

SQL_INTERVAL_STRUCT is;  
SQLINTEGER    cbValue;  
SQLUINTEGER   days, hours;  
  
// Execute a select statement; "interval_column" is a column  
// whose data type is SQL_INTERVAL_DAY_TO_MINUTE.  
SQLExecDirect(hstmt, "SELECT interval_column FROM table", SQL_NTS);  
  
// Bind  
SQLBindCol(hstmt, 1, SQL_C_INTERVAL_DAY_TO_MINUTE, &is, sizeof(SQL_INTERVAL_STRUCT), &cbValue);  
  
// Fetch  
SQLFetch(hstmt);  
  
// Process data  
days = is.intval.day_second.day;  
hours = is.intval.day_second.hour;