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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar