Pular para o conteúdo principal

Questão de Banco de Dados — PostgreSQL — FCC 2015

Banco de DadosPostgreSQL
Código
fc020488
Banca
FCC
Órgão
MPE-PB
Ano
2015
Nível
Superior
Cargo
Analista de Sistemas – Administrador de Banco de Dados
Um Administrador de Banco de Dados deseja obter o número de dias entre as datas '2014-11-21' e '2015-01-16' e exibir esse resultado com o rótulo de coluna dias. A instrução que deve ser utilizada no Oracle 10g e no PostgreSQL 8 são, respectivamente,
  1. ASELECT to_date('2015-01-16') - to_date('2014-11-21') AS dias FROM sys.dual;SELECT date('2015-01-16') - date('2014-11-21') AS dias;
  2. BSELECT to_date('2015-01-16') - to_date('2014-11-21') AS dias FROM sys.dual;SELECT get_date('2015-01-16') - get_date('2014-11-21') AS dias;
  3. CSELECT date('2015-01-16') - date('2014-11-21') AS dias FROM date.sys;SELECT date('2015-01-16') - date('2014-11-21') AS dias;
  4. DSELECT to_date('2015-01-16') - to_date('2014-11-21') AS dias FROM sys.dual;SELECT subtract_date('2015-01-16' - '2014-11-21') AS dias;
  5. ESELECT date('2015-01-16') - date('2014-11-21') AS dias FROM sys.dual;SELECT get_date('2015-01-16') – get_date('2014-11-21') AS dias;
Revelar gabarito e comentário

GabaritoA — SELECT to_date('2015-01-16') - to_date('2014-11-21') AS dias FROM sys.dual; SELECT date('2015-01-16') - date('2014-11-21') AS dias;

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Cálculo de diferença de datas no Oracle e PostgreSQL

Gabarito: letra A. A diferença entre duas datas no Oracle 10g é obtida subtraindo valores do tipo DATE (convertidos com to_date), sendo obrigatório o uso da pseudotabela sys.dual para a instrução SELECT. No PostgreSQL 8, a subtração direta entre dois valores date retorna um inteiro representando o número de dias, e a função date('string') converte a string para o tipo date. A alternativa A reproduz exatamente essa sintaxe para cada SGBD.

A banca testa o conhecimento das funções de conversão e da obrigatoriedade do FROM no Oracle versus a sintaxe simplificada do PostgreSQL.

  1. 1Oracle: to_date + sys.dual
  2. 2PostgreSQL: date() direto
  3. 3Subtração retorna dias
  4. 4Rótulo AS dias
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

A instrução Oracle usa to_date para converter as strings e subtrai os valores, finalizando com FROM sys.dual. A instrução PostgreSQL usa date('...') e subtrai diretamente, dispensando FROM (embora FROM seja opcional se não houver tabela, mas a alternativa omite corretamente). O resultado é o número de dias, com o rótulo dias.

Alternativa B — ❌ Incorreta

A parte do Oracle está correta, mas no PostgreSQL é usada a função get_date(), que não existe no PostgreSQL 8. A função correta é date() ou a simples subtração de valores date.

Alternativa C — ❌ Incorreta

No Oracle, a tabela date.sys não existe; o correto é sys.dual. A parte do PostgreSQL está correta, mas o erro no Oracle invalida a alternativa.

Alternativa D — ❌ Incorreta

A parte do Oracle está correta, mas no PostgreSQL é usada a função subtract_date() com sintaxe incorreta ('2015-01-16' - '2014-11-21' dentro dos parênteses). Não existe essa função no PostgreSQL 8.

Alternativa E — ❌ Incorreta

No Oracle, date(...) não é uma função válida para conversão de string; o correto é to_date(...). Além disso, a tabela sys.dual está correta, mas a função Oracle está errada. No PostgreSQL, usa-se get_date() que não existe (idêntico ao erro da B).

NÃO CAIA NESSA!

O candidato pode confundir a necessidade do FROM sys.dual no Oracle com o PostgreSQL, que não exige tabela. Além disso, funções fictícias como get_date() e subtract_date() são distratores comuns. Lembre-se: no Oracle, sempre use to_date e dual; no PostgreSQL, use date ou subtração direta. Com treino, você reconhece essas variações de sintaxe.

Gabarito: letra A

Link permanente: /questoes/fc020488