ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Ordenar por Data de Aniversário (Dia)

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
fdstorti
Novato
Novato


Registrado: Quinta-Feira, 31 de Agosto de 2017
Mensagens: 6

MensagemEnviada: Qui Ago 31, 2017 10:34 am    Assunto: Ordenar por Data de Aniversário (Dia) Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Qui Ago 31, 2017 10:39 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
fdstorti
Novato
Novato


Registrado: Quinta-Feira, 31 de Agosto de 2017
Mensagens: 6

MensagemEnviada: Qui Ago 31, 2017 1:09 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Qui Ago 31, 2017 1:19 pm    Assunto: Responder com Citação

Tente desta forma:


http://www.activedelphi.com.br/forum/viewtopic.php?t=65829&highlight=dataini


bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Qui Ago 31, 2017 1:24 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
fdstorti
Novato
Novato


Registrado: Quinta-Feira, 31 de Agosto de 2017
Mensagens: 6

MensagemEnviada: Qui Ago 31, 2017 1:33 pm    Assunto: Responder com Citação

Eu estou ordenando por nome porque não consegui por dia. Você tem algum exemplo pra me mostrar?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qui Ago 31, 2017 1:37 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
fdstorti
Novato
Novato


Registrado: Quinta-Feira, 31 de Agosto de 2017
Mensagens: 6

MensagemEnviada: Qui Ago 31, 2017 1:42 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qui Ago 31, 2017 2:33 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
fdstorti
Novato
Novato


Registrado: Quinta-Feira, 31 de Agosto de 2017
Mensagens: 6

MensagemEnviada: Qui Ago 31, 2017 2:50 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Ago 31, 2017 4:57 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
fdstorti
Novato
Novato


Registrado: Quinta-Feira, 31 de Agosto de 2017
Mensagens: 6

MensagemEnviada: Sex Set 01, 2017 10:10 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB