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 

Data, com dia da semana[RESOLVIDO]

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


Registrado: Quinta-Feira, 17 de Outubro de 2013
Mensagens: 404

MensagemEnviada: Seg Dez 03, 2018 2:37 pm    Assunto: Data, com dia da semana[RESOLVIDO] Responder com Citação

Pessoal, boa tarde!

Tenho uma procedure em um banco(agenda de compromisso) sqlserver.

é essa:
Código:

USE [medico]
GO
/****** Object:  StoredProcedure [dbo].[buscaAgenda]    Script Date: 03/12/2018 14:39:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[buscaAgenda]  @datainicio varchar(16) , @datafim varchar(16), @conselho int as
begin

select
convert(varchar(5),ag.datahora,108) Hora,ag.id,ISNULL(p.nome, '---') Nome ,
ISNULL(ag.estado, 'Livre') Status, ag.datahora

from agenda ag
inner join funcionarios fn on fn.id = ag.funcionario_id
full  join pessoas p on p.id = ag.paciente_id
where @conselho = conselho and datahora between @datainicio and @datafim

end


e uso ela em um procedimento no delphi

Código:

      close;
      SQL.Clear;
      SQL.Add('EXEC BUSCAAGENDA @datainicio = :pDataIni, @datafim = :pDataFim, @conselho = :pCrm');
      Parameters.ParamByName('pCrm').Value := crm;
      Parameters.ParamByName('pDataIni').Value := (DateToStr(NOW) + ' 00:00');
      Parameters.ParamByName('pDataFim').Value := (DateToStr(NOW) + ' 23:59');


Funciona belezinha, porém preciso que venha junto com a data o dia da semana, tipo segunda-feira, terça-feira...


alguém pode dar uma ajuda?

valeu pessoal..


Editado pela última vez por rogerioclaro2 em Ter Dez 04, 2018 2:48 pm, num total de 1 vez
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: Seg Dez 03, 2018 7:57 pm    Assunto: Responder com Citação

Boa noite,

No SQL Server pode ser utilizada a função DatePart para obter um número representando o dia da semana, mas o retorno da função varia conforme a configuração para Set DateFirst utilizada no script ou no servidor. Para considerar o primeiro dia da semana a segunda feira experimente acrescentar no início da procedure:

Código:
set datefirst 1;


E depois acrescente na query o trecho abaixo:

Código:
datepart(weekday, ag.datahora) as diasemana


Outra alternativa seria utilizar as funções nativas do Delphi (ex: DayOfTheWeek) para obter o dia da semana na sua aplicação.

Espero que ajude


Editado pela última vez por imex em Dom Out 01, 2023 5:16 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rogerioclaro2
Experiente
Experiente


Registrado: Quinta-Feira, 17 de Outubro de 2013
Mensagens: 404

MensagemEnviada: Ter Dez 04, 2018 8:31 am    Assunto: Responder com Citação

imex escreveu:
Boa noite,

No SQL Server pode ser utilizada a função DatePart para obter um número representando o dia da semana, mas o retorno da função varia conforme a configuração para Set DateFirst utilizada no script ou no servidor. Para considerar o primeiro dia da semana a segunda feira experimente acrescentar no início da procedure:

Código:
set datefirst 1;


E depois acrescente na query o trecho abaixo:

Código:
datepart(weekday, ag.datahora) as diasemana


Outra alternativa seria utilizar as funções nativas do Delphi (ex: DayOfTheWeek) para obter o dia da semana na sua aplicação.

Espero que ajude


Obrigado imex.

Minha procedure no banco ficou assim

Código:

USE [medico]
GO
/****** Object:  StoredProcedure [dbo].[buscaAgenda]    Script Date: 04/12/2018 09:20:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[buscaAgenda]  @datainicio varchar(16) , @datafim varchar(16), @conselho int as
begin
set datefirst 1;
select
convert(varchar(5),ag.datahora,108) Hora,ag.id,ISNULL(p.nome, '---') Nome ,
ISNULL(ag.estado, 'Livre') Status, ag.datahora, datepart(weekday, ag.datahora) as diasemana

from agenda ag
inner join funcionarios fn on fn.id = ag.funcionario_id
full  join pessoas p on p.id = ag.paciente_id
where @conselho = conselho and datahora between @datainicio and @datafim

end



Ao adicionar o campo dias da semana na minha query como String recompilar o exe ele retorna um erro de campo:

Código:

---------------------------
MedicSys
---------------------------
 Type mismatch for field 'diasemana', expecting: String actual: Integer.
---------------------------
OK   
---------------------------


o campo esta no delphi como string, mas ele "retorna" que e inteiro
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: Ter Dez 04, 2018 10:49 am    Assunto: Responder com Citação

Acho que uma alternativa para que a procedure retorne uma string no lugar do número retornado pela função DatePart seria utilizar um Case:

Código:
case datepart(weekday, ag.datahora)
    when 1 then 'Seg'
    when 2 then 'Ter'
    when 3 then 'Qua'
    when 4 then 'Qui'
    when 5 then 'Sex'
    when 6 then 'Sab'
    else        'Dom'
end as diasemana


Se você estiver utilizando o SQL Server 2012 ou mais recente também pode pesquisar pela função Format.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rogerioclaro2
Experiente
Experiente


Registrado: Quinta-Feira, 17 de Outubro de 2013
Mensagens: 404

MensagemEnviada: Ter Dez 04, 2018 2:44 pm    Assunto: Responder com Citação

imex escreveu:
Acho que uma alternativa para que a procedure retorne uma string no lugar do número retornado pela função DatePart seria utilizar um Case:

Código:
case datepart(weekday, ag.datahora)
    when 1 then 'Seg'
    when 2 then 'Ter'
    when 3 then 'Qua'
    when 4 then 'Qui'
    when 5 then 'Sex'
    when 6 then 'Sab'
    else        'Dom'
end as diasemana


Se você estiver utilizando o SQL Server 2012 ou mais recente também pode pesquisar pela função Format.

Espero que ajude


obrigado imex, valeu pela dica!
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