Alterando apenas hora.

16/02/2016

0

Bom dia , preciso diminuir em 1hora os horários de saída dos funcionários. Tenho uma tabela que contem todos os dias da semana (segunda á domingo), e em cada dia tem os horarios de entrada e saída e outra tabela com os Id's dos horários.

Para cada grupo de horario tem uma identificação na tabela de horário (que é a que preciso alterar), essa tabela é assim:

Resultado do select resumido:


       [IDHORARIO]
      ,[HORARIO]
      ,[SEG_ENT1]
      ,[SEG_SAI1]
      ,[SEG_ENT2]
      ,[SEG_SAI2]
      ,[TER_ENT1]
      ,[TER_SAI1]
      ,[TER_ENT2]
      ,[TER_SAI2]



comecei a fazer a seguinte procedure

DECLARE @idhorario INT = (SELECT idhorario from TB_HORARIO),
          @hentrada datetime = (select SEG_ENT1, SEG_ENT2, TER_ENT1, TER_ENT2, QUA_ENT1, QUA_ENT2, QUI_ENT1,  QUI_ENT2, SEX_ENT1, SEX_ENT2 from TB_HORARIO),
		  @hsaida datetime = (select  SEG_SAI1, SEG_SAI2, TER_SAI1, TER_SAI2, QUA_SAI1, QUA_SAI2, QUI_SAI1,  QUI_SAI2, SEX_SAI1, SEX_SAI2 from TB_HORARIO)




Mas está dando a seguinte mensagem

Mensagem 116, Nível 16, Estado 1, Linha 6
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Mensagem 116, Nível 16, Estado 1, Linha 7
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Simone

Simone

Responder

Posts

16/02/2016

Marcos P

declare @hentrada datetime = (select SEG_ENT1, SEG_ENT2, TER_ENT1, TER_ENT2, QUA_ENT1, QUA_ENT2, QUI_ENT1,  QUI_ENT2, SEX_ENT1, SEX_ENT2 from TB_HORARIO)


É a tentativa de preencher o valor de uma variável com o conteúdo de várias colunas... Por isso do erro !

A lógica não é essa... você deve atualizar cada uma das colunas ( via Update ) utilizando a função DatedAdd ( com o parâmetro hh )... assumindo, claro, que as colunas são datetime.

Dê uma olhada na sintaxe do DateAdd e, senão conseguir, retorne por aqui com a estrutura da tabela e o resto da query que você está tentando executar.
Responder

16/02/2016

Simone

Boa tarde Marcos,
obrigado pela atenção, mas não to conseguindo achar um jeito de alterar horas e minutos de todos os dias de uma unica vez,

a estrutura da tabela é essa

CREATE TABLE [dbo].[HORARIO](
	[IDHORARIO] [smallint] NOT NULL DEFAULT ((0)),
	[DSHORARIO] [nvarchar](40) NOT NULL,
	[SEG_ENT1] [datetime] NOT NULL ,
	[SEG_SAI1] [datetime] NOT NULL,
	[SEG_ENT2] [datetime] NOT NULL,
	[SEG_SAI2] [datetime] NOT NULL,
        [TER_ENT1] [datetime] NOT NULL,
	[TER_SAI1] [datetime] NOT NULL ,
	[TER_ENT2] [datetime] NOT NULL ,
	[TER_SAI2] [datetime] NOT NULL ,
	[QUA_ENT1] [datetime] NOT NULL,
	[QUA_SAI1] [datetime] NOT NULL ,
	[QUA_ENT2] [datetime] NOT NULL,
	[QUA_SAI2] [datetime] NOT NULL ,
	[QUI_ENT1] [datetime] NOT NULL ,
	[QUI_SAI1] [datetime] NOT NULL ,
	[QUI_ENT2] [datetime] NOT NULL,
	[QUI_SAI2] [datetime] NOT NULL ,
	[SEX_ENT1] [datetime] NOT NULL,
	[SEX_SAI1] [datetime] NOT NULL ,
	[SEX_ENT2] [datetime] NOT NULL,
	[SEX_SAI2] [datetime] NOT NULL
)
Responder

16/02/2016

Marcos P

A partir do exemplo abaixo...
select getdate(),dateadd(hh,-1,getdate())


Fica facil fazer o que você precisa...
update horario
set seg_ent1 = dateadd(hh,-1,seg_ent1),
    seg_sai1 = dateadd(hh,-1,seg_sai1),    
    seg_ent2 = dateadd(hh,-1,seg_ent2),
    seg_sai2 = dateadd(hh,-1,seg_sai2),    
:
:
Responder

16/02/2016

Simone

é, achei uma forma, eu concatenei a hora e minuto, e está dando certo . Estava fazendo de outro jeito e estava dando erro.
Quando terminar eu posto aqui como ficou.
Mais uma vez obrigado
Responder

23/02/2016

Simone

Oii, como havia dito, assim que finalizasse ia postar como ficou, desculpe a demora.



Apenas troquei horas por minutos.
update horario
set 
    seg_ent1 = dateadd(minute,50,seg_ent1),
    seg_sai1 = dateadd(minute,70,seg_sai1)
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar