Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
fdstorti Novato
Registrado: Quinta-Feira, 31 de Agosto de 2017 Mensagens: 6
|
Enviada: Qui Ago 31, 2017 10:34 am Assunto: Ordenar por Data de Aniversário (Dia) |
|
|
Olá, estou começando usar o Delphi a pouco e estou tendo problema com um programa que estou desenvolvendo.
É o seguinte: tenho uma tabela de funcionários e nesta tabela guardo a data de nascimento deles. Tenho uma consulta de mês de aniversário que funciona beleza, porém neste formulário de consulta, gero um relatório e imprimo os funcionários que fazem aniversário num determinado mês. Gostaria de nesse relatório ordenar os funcionários por data de aniversário e não data de nascimento (até porque não quero que apareça no relatório a data de nascimento do funcionário, e sim o dia do aniversário). Alguém aí pode me ajudar?
Obs.: Utilizo o delphi 7 e o interbase 6.5 |
|
Voltar ao Topo |
|
|
renanbg Colaborador
Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Qui Ago 31, 2017 10:39 am Assunto: |
|
|
Se entendi bem, você quer exibir apenas o dia do aniversario certo?
Se for isso, no seu select, use a função extract para pegar apenas o dia da data de nascimento.
aqui tem um exemplo
Código: | http://www.activedelphi.com.br/forum/viewtopic.php?t=74506&sid=86dc4491597f24a130bd2dba7a4654d1 |
|
|
Voltar ao Topo |
|
|
fdstorti Novato
Registrado: Quinta-Feira, 31 de Agosto de 2017 Mensagens: 6
|
Enviada: Qui Ago 31, 2017 1:09 pm Assunto: |
|
|
O dia do aniversário eu já tinha feito, o que eu não estou conseguindo é ordenar a minha Query por data de aniversário. Eu só consigo ordenar pela data de nascimento.
Eu estou usando o seguinte comando SQL: "SELECT * FROM FUNCIONARIO WHERE EXTRACT (MONTH FUNC_DATANASC) = :MES
ORDER BY FUNC_NOME".
Obs.: Já tentei depois de order by colocar "EXTRACT (DAY FUNC_DATANASC) mas dá erro. |
|
Voltar ao Topo |
|
|
johnny-walker Moderador
Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
|
Voltar ao Topo |
|
|
renanbg Colaborador
Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Qui Ago 31, 2017 1:24 pm Assunto: |
|
|
Você está extraindo o mes e ordenando por nome.
Para que funcione da forma que deseja, extraia tbm o dia e ordene pelo dia. |
|
Voltar ao Topo |
|
|
fdstorti Novato
Registrado: Quinta-Feira, 31 de Agosto de 2017 Mensagens: 6
|
Enviada: Qui Ago 31, 2017 1:33 pm Assunto: |
|
|
Eu estou ordenando por nome porque não consegui por dia. Você tem algum exemplo pra me mostrar? |
|
Voltar ao Topo |
|
|
leo_cj Colaborador
Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Qui Ago 31, 2017 1:37 pm Assunto: |
|
|
Tenta assim:
Código: | SELECT *
FROM FUNCIONARIO
WHERE EXTRACT (MONTH FUNC_DATANASC) = :MES
ORDER BY FUNC_DATANASC |
no order você pode usar a data de nascimento normalmente, pois não é necessário mostrar os campos utilizados no order, então você pode ordenar pela data de nascimento sem que a mesma seja mostrada. Lógicamente, nesse caso, você teria que trocar o All (*) do select pelos campos desejados |
|
Voltar ao Topo |
|
|
fdstorti Novato
Registrado: Quinta-Feira, 31 de Agosto de 2017 Mensagens: 6
|
Enviada: Qui Ago 31, 2017 1:42 pm Assunto: |
|
|
Já tentei isso. Mas veja o que acontece:
Exemplo:
Tenho 3 funcionários que fazem aniversário em setembro. O funcionário A nasceu no dia 20/09/1988. O B, no dia 21/09/1965, e o C, no dia 13/09/1991.
Logicamente eu tenho que listar os que fazem aniversário primeiro, ou seja:
C, A e B.
Todavia, caso eu ordene por data de nascimento (como me indicou), a ordem ficaria do mais velho pro mais novo (B,A e C). Este é meu problema rsrsrs |
|
Voltar ao Topo |
|
|
leo_cj Colaborador
Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Qui Ago 31, 2017 2:33 pm Assunto: |
|
|
Entendi, falha minha, não tinha pensando no ano
tenta assim:
Código: | SELECT *
FROM FUNCIONARIO
WHERE EXTRACT (MONTH FUNC_DATANASC) = :MES
ORDER BY EXTRACT(MONTH FUNC_DATANASC), EXTRACT(DAY FUNC_DATANASC) |
|
|
Voltar ao Topo |
|
|
fdstorti Novato
Registrado: Quinta-Feira, 31 de Agosto de 2017 Mensagens: 6
|
Enviada: Qui Ago 31, 2017 2:50 pm Assunto: |
|
|
Obrigado pela dica, mas parece que o interbase não aceita essa cláusula (extract) após "order by". Está dando erro.
"Extract" após a cláusula "where" funciona bem, mas depois de "order by" dá erro! |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Ago 31, 2017 4:57 pm Assunto: |
|
|
Boa tarde,
fdstorti, não fiz nenhum teste, não sei se funciona da forma como você postou, mas pela sintaxe da função Extract deveria ter um From antes do nome do campo:
Código: | SELECT
*
FROM FUNCIONARIO
WHERE
EXTRACT(MONTH FROM FUNC_DATANASC) = :MES
ORDER BY
EXTRACT(DAY FROM FUNC_DATANASC) |
Se o problema continuar, experimente fazer um teste dessa forma para ver se funciona:
Código: | SELECT
*
FROM
(
SELECT
*,
EXTRACT(DAY FROM FUNC_DATANASC) AS DIANASC
FROM FUNCIONARIO
WHERE
EXTRACT(MONTH FROM FUNC_DATANASC) = :MES
) AS T
ORDER BY
DIANASC |
Espero que ajude
Editado pela última vez por imex em Dom Out 01, 2023 4:13 pm, num total de 1 vez |
|
Voltar ao Topo |
|
|
fdstorti Novato
Registrado: Quinta-Feira, 31 de Agosto de 2017 Mensagens: 6
|
Enviada: Sex Set 01, 2017 10:10 am Assunto: |
|
|
Galera, obrigado a todos pelos comentários. Eu consegui resolver o meu problema, porém de outra forma. Entretanto, os comentários aqui postados elucidaram meus pensamentos. Eis aí como fiz:
SELECT FUNC_NOME, FUNC_DATANASC, EXTRACT (DAY FROM FUNC_DATANASC) AS DIA
WHERE EXTRACT (MONTH FROM FUNC_DATANASC) = :MES
ORDER BY 3 |
|
Voltar ao Topo |
|
|
|