Compartilhar via


Literais de intervalo

O ODBC requer que todos os drivers ofereçam suporte à conversão do tipo de dados SQL_CHAR ou SQL_VARCHAR para todos os tipos de dados de intervalo C. No entanto, se a fonte de dados subjacente não der suporte a tipos de dados de intervalo, o driver precisará saber o formato correto do valor no campo SQL_CHAR para dar suporte a essas conversões. Da mesma forma, o ODBC exige que qualquer tipo C ODBC seja conversível em SQL_CHAR ou SQL_VARCHAR, portanto, um driver precisa saber qual formato um intervalo armazenado no campo de caractere deve ter. Esta seção descreve a sintaxe de literais de intervalo, que o gravador de driver precisa usar para validar os campos de SQL_CHAR durante a conversão de ou para tipos de dados de intervalo C.

Observação

A sintaxe BNF completa para literais de intervalo é mostrada na seção Sintaxe Literal de Intervalo no Apêndice C: Gramática SQL.

Para passar literais de intervalo como parte de uma instrução SQL, uma sintaxe de cláusula de escape é definida para literais de intervalo. Para obter mais informações, consulte Literais de Data, Hora e Carimbo de data/hora.

Um literal de intervalo tem o formato:

INTERVAL[<sign>] 'value' <interval qualifier>  

onde "INTERVAL" indica que o literal de caractere é um intervalo. O sinal pode ser mais ou menos; ele está fora da cadeia de caracteres de intervalo e é opcional.

O qualificador de intervalo pode ser um único campo de data/hora ou ser composto por dois campos de data/hora, no formato: <campo> à esquerda TO <campo> à direita.

  • Quando o intervalo é composto por um único campo, o campo único pode ser um campo que não é um segundo que pode ser acompanhado por uma precisão de entrelinha opcional entre parênteses. O campo datetime único também pode ser um segundo campo que pode ser acompanhado pela precisão opcional à esquerda, pela precisão opcional de frações de segundos entre parênteses ou por ambas. Se uma precisão principal e uma precisão de fração de segundo estiverem presentes para um campo de segundos, elas serão separadas por vírgulas. Se o campo de segundos tiver uma precisão de frações de segundos, ele também deverá ter uma precisão de entrelinha.

  • Quando o intervalo é composto de campos à esquerda e à direita, o campo à esquerda é um campo que não é um segundo que pode ser acompanhado pela precisão do campo à esquerda do intervalo entre parênteses. O campo à direita pode ser um campo que não seja um segundo ou um segundo campo que pode ser acompanhado por uma precisão de frações de segundos de intervalo entre parênteses.

A cadeia de caracteres de intervalo no valor é colocada entre aspas simples. Pode ser um literal ano-mês ou um literal diurno. O formato da cadeia de caracteres em valor é determinado pelas seguintes regras:

  • A cadeia de caracteres contém um valor decimal para cada campo implícito no <qualificador de intervalo>.

  • Se a precisão do intervalo incluir os campos ANO e MÊS, os valores desses campos serão separados por um sinal de menos.

  • Se a precisão do intervalo incluir os campos DIA e HORA, os valores desses campos serão separados por um espaço.

  • Se a precisão do intervalo incluir o campo HOUR e os campos de ordem inferior (MINUTE e SECOND), os valores desses campos serão separados por dois-pontos.

  • Se a precisão do intervalo incluir um campo SECOND e a precisão de segundos expressa ou implícita for diferente de zero, o caractere imediatamente antes do primeiro dígito da parte fracionária do segundo será um ponto.

  • Nenhum campo pode ter mais de dois dígitos, exceto:

    • O valor do campo principal pode ser tão longo quanto a precisão principal do intervalo expressa ou implícita.

    • A parte fracionária do campo SECOND pode ser tão longa quanto a precisão de segundos expressa ou implícita.

    • Os campos à direita seguem as restrições usuais do calendário gregoriano. (Veja Restrições do calendário gregoriano.)

A tabela a seguir lista exemplos de literais de intervalo válidos, conforme incluído na cláusula de escape ODBC para intervalos. A sintaxe da cláusula de escape é a seguinte:

Observação

{Sinal de intervalo intervalo-string intervalo-qualificador}

Cláusula de escape literal Intervalo especificado
{INTERVALO '326' ANO(4)} Especifica um intervalo de 326 anos. A precisão de entrelinha do intervalo é 4.
{INTERVALO '326' MÊS(3)} Especifica um intervalo de 326 meses. A precisão de entrelinha do intervalo é 3.
{INTERVALO '3261' DIA(4)} Especifica um intervalo de 3261 dias. A precisão de entrelinha do intervalo é 4.
{INTERVALO '163' HORA(3)} Especifica um intervalo de 163 dias. A precisão de entrelinha do intervalo é 3.
{INTERVALO '163' MINUTO(3)} Especifica um intervalo de 163 minutos. A precisão de entrelinha do intervalo é 3.
{INTERVALO '223,16' SEGUNDO(3,2)} Especifica um intervalo de 223,16 segundos. A precisão do intervalo à esquerda é 3 e a precisão dos segundos é 2.
{INTERVALO '163-11' ANO(3) PARA MÊS} Especifica um intervalo de 163 anos e 11 meses. A precisão de entrelinha do intervalo é 3.
{INTERVALO '163 12' DIA(3) A HORA} Especifica um intervalo de 163 dias e 12 horas. A precisão de entrelinha do intervalo é 3.
{INTERVALO '163 12:39' DIA(3) PARA MINUTO} Especifica um intervalo de 163 dias, 12 horas e 39 minutos. A precisão de entrelinha do intervalo é 3.
{INTERVALO '163 12:39:59.163' DIA(3) PARA SEGUNDO(3)} Especifica um intervalo de 163 dias, 12 horas, 39 minutos e 59,163 segundos. A precisão da entrelinha do intervalo é 3 e a precisão dos segundos é 3.
{INTERVALO '163:39' HORA(3) A MINUTO} Especifica um intervalo de 163 horas e 39 minutos. A precisão de entrelinha do intervalo é 3.
{INTERVALO '163:39:59.163' HORA (3) PARA SEGUNDO (4)} Especifica um intervalo de 163 horas, 39 minutos e 59,163 segundos. A precisão do intervalo principal é 3 e a precisão dos segundos é 4.
{INTERVALO '163:59.163' MINUTO (3) PARA SEGUNDO (5)} Especifica um intervalo de 163 minutos e 59,163 segundos. A precisão do intervalo principal é 3 e a precisão dos segundos é 5.
{INTERVALO -'16 23:39:56.23' DIA PARA O SEGUNDO} Especifica um intervalo de menos 16 dias, 23 horas, 39 minutos e 56,23 segundos. A precisão implícita da entrelinha é 2 e a precisão implícita dos segundos é 6.

A tabela a seguir lista exemplos de literais de intervalo inválidos:

Cláusula de escape literal Razão pela qual inválido
{INTERVALO '163' HORA(2)} A precisão da entrelinha do intervalo é 2, mas o valor do campo da entrelinha é 163.
{INTERVALO '223,16' SEGUNDO(2,2)}

{INTERVALO '223,16' SEGUNDO(3,1)}
No primeiro exemplo, a precisão principal é muito pequena e, no segundo exemplo, a precisão dos segundos é muito pequena.
{INTERVALO '223,16' SEGUNDO}

{INTERVALO '223' ANO}
Como a precisão principal não é especificada, o padrão é 2, que é muito pequeno para conter o literal especificado.
{INTERVALO '22,1234567' SEGUNDO} A precisão de segundos não é especificada, portanto, o padrão é 6. O literal tem sete dígitos após o ponto decimal.
{INTERVALO '163-13' ANO(3) PARA MÊS}

{INTERVALO '163 65' DIA(3) A HORA}

{INTERVALO '163 62:39' DIA(3) A MINUTO}

{INTERVALO '163 12:125:59.163' DIA(3) PARA SEGUNDO(3)}

{INTERVALO '163:144' HORA(3) PARA MINUTO}

{INTERVALO '163:567:234.163' HORA(3) PARA SEGUNDO(4)}

{INTERVALO '163:591.163' MINUTO(3) PARA SEGUNDO(5)}
O campo final não segue as regras do calendário gregoriano.