Fórum Convert SQL SERVER #605849
07/10/2019
0
Preciso fazer uma subtração das batidas de ponto, mas os campos são do tipo varchar e contém dados, como: Férias e Folga.
Por este motivo, retorna erro. Tentei alguns convert e ate agora não tive sucesso.
Postarei abaixo o meu select. No caso gostaria de subtrair a saida2 - entrada1, pra ter o saldo.
select
funcionario
data,
entrada1,
saida1,
entrada2,
saida2
from tabela_batidasponto
bPoderiam me ajudar .
Simone
Curtir tópico
+ 0Posts
07/10/2019
Emerson Nascimento
Gostei + 0
07/10/2019
Simone
FuncionarioX data = 2019-10-07 00:00:00 08:00 12:00 13:00 17:00
porem, como o campo é varchar, contem informação como Férias e Folga.
ficando assim:
FuncionarioY 2019-10-07 00:00:00 férias férias férias férias
Gostei + 0
08/10/2019
Emerson Nascimento
SELECT funcionario, data, entrada1, saida1, entrada2, saida2, case when not upper(left(entrada1,1)) like '[A-Z]' and not upper(left(saida1,1)) like '[A-Z]' and not upper(left(entrada2,1)) like '[A-Z]' and not upper(left(saida2,1)) like '[A-Z]' then convert(varchar(5), convert(datetime,(convert(varchar(10),data,101) + ' ' + saida1)) - convert(datetime,(convert(varchar(10),data,101) + ' ' + entrada1))+ convert(datetime,(convert(varchar(10),data,101) + ' ' + saida2)) - convert(datetime,(convert(varchar(10),data,101) + ' ' + entrada2)) ,8) else entrada1 end resultado FROM tabela_batidasponto ORDER BY funcionario, data
Gostei + 0
23/10/2019
Simone
SELECT funcionario, data, entrada1, saida1, entrada2, saida2, case when not upper(left(entrada1,1)) like '[A-Z]' and not upper(left(saida1,1)) like '[A-Z]' and not upper(left(entrada2,1)) like '[A-Z]' and not upper(left(saida2,1)) like '[A-Z]' then convert(varchar(5), convert(datetime,(convert(varchar(10),data,101) + ' ' + saida1)) - convert(datetime,(convert(varchar(10),data,101) + ' ' + entrada1))+ convert(datetime,(convert(varchar(10),data,101) + ' ' + saida2)) - convert(datetime,(convert(varchar(10),data,101) + ' ' + entrada2)) ,8) else entrada1 end resultado FROM tabela_batidasponto ORDER BY funcionario, data
Oi Emerson, me deculpa pelo a demora cheguei a testar, mas apareceram outras prioridades não conseguir voltar aqui pra da o feedback.
Então, essa query ta quase perfeita, não fosse a diferença dos minutos.
Meu retorno:
func data ent1 sai1 ent2 sai2 htrabalhadas 6 2019-10-14 00:00:00 07:57 12:30 13:31 17:17 08:19 6 2019-10-15 00:00:00 07:59 12:29 13:19 17:21 08:32 6 2019-10-16 00:00:00 08:02 13:08 14:02 17:25 08:29 6 2019-10-17 00:00:00 07:54 13:15 14:10 17:14 08:25 6 2019-10-18 00:00:00 08:00 13:42 14:27 17:12 08:27
Se for somar as colunas ent1 e sai2, o saldo de htrabalhadas fica um pouco diferente do retorno do select.
Por exemplo
Ent1 = 7:59 + Sai2 = 7:21 , o total de htrabalhadas não deveria ser 22:00?
Gostei + 0
23/10/2019
Simone
SELECT funcionario, data, entrada1, saida1, entrada2, saida2, case when not upper(left(entrada1,1)) like '[A-Z]' and not upper(left(saida1,1)) like '[A-Z]' and not upper(left(entrada2,1)) like '[A-Z]' and not upper(left(saida2,1)) like '[A-Z]' then convert(varchar(5), convert(datetime,(convert(varchar(10),data,101) + ' ' + saida1)) - convert(datetime,(convert(varchar(10),data,101) + ' ' + entrada1))+ convert(datetime,(convert(varchar(10),data,101) + ' ' + saida2)) - convert(datetime,(convert(varchar(10),data,101) + ' ' + entrada2)) ,8) else entrada1 end resultado FROM tabela_batidasponto ORDER BY funcionario, data
Oi Emerson, me deculpa pelo a demora cheguei a testar, mas apareceram outras prioridades não conseguir voltar aqui pra da o feedback.
Então, essa query ta quase perfeita, não fosse a diferença dos minutos.
Meu retorno:
func data ent1 sai1 ent2 sai2 htrabalhadas 6 2019-10-14 00:00:00 07:57 12:30 13:31 17:17 08:19 6 2019-10-15 00:00:00 07:59 12:29 13:19 17:21 08:32 6 2019-10-16 00:00:00 08:02 13:08 14:02 17:25 08:29 6 2019-10-17 00:00:00 07:54 13:15 14:10 17:14 08:25 6 2019-10-18 00:00:00 08:00 13:42 14:27 17:12 08:27
Se for somar as colunas ent1 e sai2, o saldo de htrabalhadas fica um pouco diferente do retorno do select.
Por exemplo
Ent1 = 7:59 + Sai2 = 7:21 , o total de htrabalhadas não deveria ser 08:22 ?
Gostei + 0
23/10/2019
Emerson Nascimento
Por exemplo
Ent1 = 7:59 + Sai2 = 7:21 , o total de htrabalhadas não deveria ser 22:00?
você está correta, Simone.
Eu não previ que haveria apontamento em dias distintos. pra resolver isso basta alterar a query:
SELECT
funcionario,
data,
entrada1,
saida1,
entrada2,
saida2,
case when not upper(left(entrada1,1)) like '[A-Z]'
and not upper(left(saida1,1)) like '[A-Z]'
and not upper(left(entrada2,1)) like '[A-Z]'
and not upper(left(saida2,1)) like '[A-Z]'
then
convert(varchar(5),
convert(datetime,(convert(varchar(10),dateadd(dd,(case when saida1 < entrada1 then 1 else 0 end),data),101) + ' ' + saida1)) - convert(datetime,(convert(varchar(10),data,101) + ' ' + entrada1))+
convert(datetime,(convert(varchar(10),dateadd(dd,(case when saida2 < entrada2 then 1 else 0 end),data),101) + ' ' + saida2)) - convert(datetime,(convert(varchar(10),data,101) + ' ' + entrada2))
,8)
else
entrada1
end resultado
FROM
tabela_batidasponto
ORDER BY
funcionario, dataGostei + 0
Clique aqui para fazer login e interagir na Comunidade :)