Questão de Banco de Dados — PostgreSQL — FCC 2017
- Código
- fc039837
- Banca
- FCC
- Órgão
- TRT - 24ª REGIÃO (MS)
- Ano
- 2017
- Nível
- Superior
- Cargo
- Analista Judiciário - Tecnologia da Informação
- A123
- BY12
- CY
- D1234
- EXY1
GabaritoA — 123
Gabarito: letra A. A função SUBSTRING(string, pattern) no PostgreSQL, quando o padrão contém parênteses, retorna a substring que corresponde ao primeiro grupo de captura, e não ao padrão inteiro. No padrão 'Y*([0-9]{1,3})', o grupo captura '123' — exatamente o que será exibido.
A banca testa o conhecimento do comportamento específico do PostgreSQL para SUBSTRING com expressões regulares POSIX. Diferente de outras linguagens, onde a função retorna a correspondência completa do padrão, o PostgreSQL retorna o texto do primeiro parêntese de captura quando existente.
String: 'XY1234Z'
Padrão: 'Y*([0-9]{1,3})'
Y* — zero ou mais ocorrências do caractere 'Y'.
([0-9]{1,3}) — grupo de captura com 1 a 3 dígitos.
A correspondência se dá a partir da posição do 'Y': Y* consome o 'Y', e o grupo captura os três primeiros dígitos '123'. Como o quantificador é ganancioso, ele pega o máximo possível (3 dígitos). O resultado é '123'.
Alternativa A — ✅ Correta ⟵ GABARITO
Retorna '123', que é o conteúdo do primeiro grupo de captura.
Alternativa B — ❌ Incorreta
'Y12' seria o resultado se o grupo capturasse apenas 2 dígitos após um Y, mas o grupo captura 3, e a função não inclui o Y (apenas o grupo).
Alternativa C — ❌ Incorreta
'Y' corresponderia à captura do grupo apenas se o grupo fosse Y, o que não é o caso.
Alternativa D — ❌ Incorreta
'1234' tem 4 dígitos, mas o grupo limita a 3. O motor ganancioso pegaria '123', não '1234'.
Alternativa E — ❌ Incorreta
'XY1' incluiria o X e um Y, mas o padrão não captura o X (Y* não casa com X) e o grupo captura 1 dígito apenas, mas o motor pega o máximo possível, que é 3.
No PostgreSQL, decore o comportamento da SUBSTRING com expressão regular: se houver parênteses, retorna o primeiro grupo; caso contrário, retorna a correspondência completa. Essa distinção é clássica em questões de concursos.
Gabarito: letra A.
Link permanente: /questoes/fc039837