|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
rogerioclaro2 Experiente
Registrado: Quinta-Feira, 17 de Outubro de 2013 Mensagens: 404
|
Enviada: Seg Dez 03, 2018 2:37 pm Assunto: Data, com dia da semana[RESOLVIDO] |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Seg Dez 03, 2018 7:57 pm Assunto: |
|
|
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:
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 |
|
|
rogerioclaro2 Experiente
Registrado: Quinta-Feira, 17 de Outubro de 2013 Mensagens: 404
|
Enviada: Ter Dez 04, 2018 8:31 am Assunto: |
|
|
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:
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Dez 04, 2018 10:49 am Assunto: |
|
|
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 |
|
|
rogerioclaro2 Experiente
Registrado: Quinta-Feira, 17 de Outubro de 2013 Mensagens: 404
|
Enviada: Ter Dez 04, 2018 2:44 pm Assunto: |
|
|
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 |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|