Estou aprendendo SQL. Minha pesquisa não foi frutífera porque não acho que estou usando a terminologia correta.
Eu tenho uma tabela com uma coluna datetime no Postgresql. O que eu quero fazer é criar uma única coluna no conjunto de resultados que produza algo como: Q2/'22
or Q4/'23
.
Eu tentei usar +
, mas não funciona (recebo um erro). Não tenho certeza de como prosseguir. Existe uma maneira no SQL?
SELECT
name, COUNT(name),
DATE_TRUNC('quarter', date) AS quarterview,
CASE
WHEN DATE_TRUNC('quarter', date) = '2022-04-01 00:00:00'
THEN EXTRACT(quarter FROM DATE_TRUNC('quarter', date)) + '/\'' + EXTRACT(year FROM DATE_TRUNC('year', date))
END
FROM
mytable
Existe uma maneira melhor de fazer isso? caso contrário, terei que escrever casos para cada trimestre e para cada ano.
Também na instrução case tentei usar o alias "quarterview", mas recebi um erro ao dizer que "quarterview" não é uma coluna. Existe uma maneira de usar o alias em vez de escrever DATE_TRUNC
várias vezes?
Podemos usar a
TO_CHAR
função combinada com concatenação de strings como abaixo, verifique istoConcatenação de Strings: No PostgreSQL, você concatena strings usando
||
em vez de+
.Extraindo Trimestre e Ano: Você pode extrair o trimestre e o ano diretamente da coluna de data e formatá-los conforme necessário.
Usando Alias no Mesmo SELECT: Você não pode usar um alias (quarterview no seu caso) na mesma
SELECT
cláusula onde ele está definido. Os aliases podem ser usados emGROUP BY
,ORDER BY
ou em uma consulta subsequente envolvendo o original.Aqui está uma versão revisada da sua consulta:
Esta consulta faz o seguinte:
||
para concatenação de strings.EXTRACT(QUARTER FROM date)
e os dois últimos dígitos do ano comEXTRACT(YEAR FROM date) % 100
.name
eDATE_TRUNC('quarter', date)
conta os nomes por trimestre.EXTRACT(YEAR FROM date) % 100
, a operação % 100 obtém os dois últimos dígitos do ano (por exemplo, '22' para 2022).Lembre-se de agrupar por todos os campos não agregados na sua cláusula select. Se você tiver outras condições ou necessidades específicas, talvez seja necessário ajustar a cláusula GROUP BY adequadamente.