Jump to content
Rodymb

Update no campo tipo int buscando do campo tipo datetime

Recommended Posts

Bom dia!

 

Preciso fazer um update em um campo do tipo  int de uma tabela para corrigir o horário e a informação que estou buscando está em um campo do tipo datetime de outra tabela. Fiz um update da seguinte forma:

 

update zan_m00 set m00zc=(SELECT convert(varchar(11),dataemissao,114) 
                          FROM tab_nota_header 
                          where dataemissao between '2018-08-01 00:00:00' and '2018-08-01 23:59:59' 
                          and numpdv=111 
                          and codloja=1 
                          and numnota=74841) 
where m00af='2018-08-01' 
and m00za=1 
and m00ac=111 
and m00ad=69614


 

Esse update retornou a seguinte mensagem:

Falha ao converter o varchar valor '11:56:57:00' para o tipo de dados int.

 

No lugar onde está varchar experimentei usar int, entretanto, ele faz o update somando todo o conteúdo do campo, também usei o CAST e o problema é o mesmo.

Se eu fizer somente o select, ele retorna pra mim somente a hora, que é o que preciso, mas aí tem outro problema, no campo tipo int a hora é tudo junto 115657 e nesse select ele retorna 11:56:57.

 

Existe alguma forma de fazer esse update da forma que preciso?

 

Share this post


Link to post
Share on other sites

Colega, sugiro fazer duas transformações, utilizando CONVERT, uma de DATETIME para VARCHAR, pegando todas as informações e a segunda transformando VARCHAR para INT.

 

Abaixo segue a sugestão:


update zan_m00 set m00zc=(SELECT CONVERT(INT, CAST(convert(varchar(21),dataemissao,113) as DATETIME))
                          FROM tab_nota_header 
                          where dataemissao between '2018-08-01 00:00:00' and '2018-08-01 23:59:59' 
                          and numpdv=111 
                          and codloja=1 
                          and numnota=74841) 
where m00af='2018-08-01' 
and m00za=1 
and m00ac=111 
and m00ad=69614


maiores detalhes sobre os tipos de conversões possíveis pode ser visto em https://docs.microsoft.com/pt-br/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017

 

Detalhe: Isso é uma adaptação e certamente você irá precisar ajustar a aplicação para fazer o tratamento inverso, na hora de exibir o dado (transformar de INT para DATETIME ou VARCHAR).

 

A solução ideal seria você ajustar o modelo do banco.

Share this post


Link to post
Share on other sites
update zan_m00 set m00zc=(SELECT CONVERT(INT, CAST(convert(varchar(21),dataemissao,113) as DATETIME))
                          FROM tab_nota_header 
                          where dataemissao between '2018-08-01 00:00:00' and '2018-08-01 23:59:59' 
                          and numpdv=111 
                          and codloja=1 
                          and numnota=74841) 
where m00af='2018-08-01' 
and m00za=1 
and m00ac=111 
and m00ad=69614

 

Testei o select e ele retornou a mensagem:

 

Mensagem 241, Nível 16, Estado 1, Linha 2
Falha ao converter data e/ou hora da cadeia de caracteres.

 

Vou dar uma olhada nesses tipos de conversões e ver se consigo alguma coisa. Obrigado pela colaboração.

Share this post


Link to post
Share on other sites
Colega, havia uma conversão incorreta o tamanho da String deve ser 20 e não 21 (destacado em vermelho).

Antes de fazer o update, utilize o select abaixo para te ajudar a validar o resultado
SELECT CONVERT(INT, CAST(convert(varchar(20),dataemissao,113) as DATETIME))


update zan_m00 set m00zc=(SELECT CONVERT(INT, CAST(convert(varchar(20),dataemissao,113) as DATETIME))
                          FROM tab_nota_header 
                          where dataemissao between '2018-08-01 00:00:00' and '2018-08-01 23:59:59' 
                          and numpdv=111 
                          and codloja=1 
                          and numnota=74841) 
where m00af='2018-08-01' 
and m00za=1 
and m00ac=111 
and m00ad=69614

 

Share this post


Link to post
Share on other sites

Bom dia!

 

WCN, fiz o select conforme você orientou e ele somou o campo. Testei vários tipos de conversões e não tem dado certo, talvez tenha que mudar a estrutura das tabelas, aí nesse caso eu já não tenho acesso.

De qualquer forma, obrigado por enquanto, vou tentar mais algumas opções, se não der certo vou ter que mudar o foco para outra forma.

 

image.png.671e6f05f03f7849df47e094b152f022.png

 

Share this post


Link to post
Share on other sites

Basta converter para inteiro a coluna detetime (irá perder os segundos).

O windows internamente armazenda data/hora como float.

 

select getdate() Real,cast(getdate() as int) Inteiro,cast(cast(getdate() as int) as datetime) SemSegundos

 

Edited by Faabiianooc

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By heenrique
      Boa Noite
       
      amigos tenho um select no qual me retorna o seguinte 
      SELECT * FROM sis_suporte WHERE tecnico = '1' AND abertura < '2019-10-30'; +----+--------------------------------------+------------+---------------------+---------------------+-------+---------+----------------+-----------------------------+------------------+----------------------------+---------------------+------------+--------------+-------+---------+-------------+------------------------------------------------------------------+ | id | uuid_suporte | assunto | abertura | fechamento | email | status | chamado | nome | login | atendente | visita | prioridade | ramal | reply | tecnico | login_atend | motivo_fechar | +----+--------------------------------------+------------+---------------------+---------------------+-------+---------+----------------+-----------------------------+------------------+----------------------------+---------------------+------------+--------------+-------+---------+-------------+------------------------------------------------------------------+ | 36 | 1901294b-80e6-4389-9059-fa090c09e382 | Outros | 2019-09-14 19:27:42 | 2019-10-17 19:35:20 | NULL | aberto | 14091919272653 | Alex Ramos dos Santos | alex.santos | Letícia Paula de Oliveira | 2019-10-17 16:27:15 | normal | SAO PAULO | nao | 1 | leticia | TÉCNICO HENRIQUE FINALIZOU A ORDEM: CLIENTE BLOQUEADO | | 37 | af8da3e7-9dbc-45b9-945b-d50cd45d9ea6 | Outros | 2019-09-14 19:37:13 | 2019-10-04 21:11:25 | NULL | fechado | 14091919370623 | Alexsandro Santos Braz | alesysandro.braz | Letícia Paula de Oliveira | 2019-10-04 16:37:15 | normal | SAO PAULO | nao | 1 | leticia | TÉCNICO HENRIQUE FINALIZOU A ORDEM: | | 39 | 2b03e9d4-50ca-4713-8149-88fe083fb9d9 | Instalacao | 2019-09-16 17:00:22 | 2019-10-03 22:38:23 | NULL | fechado | 16091916593665 | Henrique Gabriel de Almeida | teste | Letícia Paula de Oliveira | 2019-10-03 08:00:15 | normal | POUSO ALEGRE | sim | 1 | leticia | TÉCNICO HENRIQUE FINALIZOU A ORDEM: QWE | | 40 | b2c0fc23-0a5c-46ae-a8b8-a8641b1d53c4 | Outros | 2019-10-03 23:21:22 | 2019-10-03 23:36:51 | NULL | fechado | 03101923210987 | Henrique Gabriel de Almeida | teste | sistema | 2019-10-03 14:21:15 | normal | POUSO ALEGRE | nao | 1 | admin | TÉCNICO HENRIQUE FINALIZOU A ORDEM: RELIGUEI A FONTE DO CLIENTE | | 41 | e9aaf792-56c6-4fe1-b8c3-aa51338f65d1 | Outros | 2019-10-03 23:23:02 | 2019-10-03 23:46:01 | NULL | fechado | 03101923225491 | Cintia Rocha Vaz | cintia.vaz | sistema | 2019-10-03 17:22:15 | normal | SAO PAULO | nao | 1 | admin | TÉCNICO HENRIQUE FINALIZOU A ORDEM: 12 | +----+--------------------------------------+------------+---------------------+---------------------+-------+---------+----------------+-----------------------------+------------------+----------------------------+---------------------+------------+--------------+-------+---------+-------------+------------------------------------------------------------------+ 5 rows in set (0.00 sec) e quando imprimo sai um por um, gostaria de agrupar por data de abertura ex.
       
      2019-09-14
      Alex Ramos
      Alexsandro
       
      2019-09-16
      Henrique
       
      2019-10-03
      Henrique
      Cintia
       
      como agrupar isso em php,
       
      esse e o cod onde eu imprimo
       
      <?php while($dados = mysqli_fetch_assoc($resultado_os)){ if ($dados['status'] == 'aberto'){ ?> <div class='row'> <div class='col-md-12'> <a href='os.php?os=<?php echo $dados['chamado']; ?>'> <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-agua'><i style='padding-top: 35%;' class='ion ion-ios-gear-outline'></i></span> <div class='info-box-content'> <span class='info-box-text'><b>ABERTA</b></span> <span class='info-box-text'><b>O.S:</b><?php echo $dados['chamado']; ?></span> <span class='info-box-text'><b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'><b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'><b>DATA/HORA:</b><?php echo (new DateTime($dados['visita']))->format('d/m/Y - H:i'); ?></span> </a> </div> </div> <?php } if ($dados['status'] == 'fechado'){ ?> <div class='row'> <div class='col-md-12'> <a href='os.php?os=<?php echo $dados['chamado']; ?>'> <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-red'><i style='padding-top: 35%;' class="fa fa-check" aria-hidden="true"></i></span> <div class='info-box-content'> <span class='info-box-text'><b>FINALIZADA</b></span> <span class='info-box-text'><b>O.S:</b><?php echo $dados['chamado']; ?></span> <span class='info-box-text'><b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'><b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'><b>DATA/HORA:</b><?php echo (new DateTime($dados['fechamento']))->format('d/m/Y - H:i'); ?></span> </a> </div> </div> <?php } } ?> </div> </div> </div> </section> </div>  
    • By lucasvbl
      <form id="frmDados" name="frmDados" class="form-horizontal" method="post" action="" enctype="multipart/form-data"> <input name="acao" id="acao" type="hidden" value="paginas"> <? if($_idCodigo){ ?> <input name="r" id="r" type="hidden" value="<?=$_idCodigo;?>"> <? } ?> <div class="row"> <div class="col-md-6"> <div class="form-group row"> <label class="col-md-2 col-form-label"> Titulo</label> <div class="col-md-10"> <input class="form-control" autocomplete="off" type="text" name="txtDescricao" id="txtDescricao" value="<?=$_rowDados->C02_DESCRICAO;?>"> </div> </div> </div> <? if($_idCodigo){ ?> <div class="col-md-6"> <div class="form-group row"> <label class="col-md-2 col-form-label"> Link</label> <div class="col-md-10"> <input readonly="readonly" class="form-control" type="text" name="txtLink" id="txtLink" value="pagina.php?p=<?=$_rowDados->C01_ID;?>"> </div> </div> </div> <? } ?> </div> <div class="row"> <div class="col-md-12"> <div class="form-group row"> <label class="col-md-12 col-form-label">Conteúdo</label> <div class="col-md-12"> <textarea class="form-control" name="txtConteudo" id="txtConteudo"> <?=$_rowDados->C04_CONTEUDO;?> </textarea> </div> </div> </div> </div> <div class="col-md-12" style="text-align: center;"> <button class="btn btn-oval btn-success" type="button" id="btGravar">Gravar</button> </div> </form> <script type="text/javascript"> $(function () { $("#btGravar").click(function(){ erros = 0; if(!$("#txtDescricao").val()){ mensagem('mensagemDIV', 'danger', 'Preencha o campo <strong>Título para a página</strong>.', 0, 'txtEntidade'); erros = 1; } if(erros > 0){ return; } off("btGravar"); var formData = $("#frmDados").serialize(); $.ajax({ url: "app.php", type: "POST", data: formData, dataType: "json", success: function (retorno) { if(retorno.status == '1'){ tratarRetorno(retorno); } if(retorno.status == '400'){ tratarRetorno(retorno); } on("btGravar"); return; } }).fail(function (jqXHR, textStatus, error) { console.log(jqXHR.responseJSON); }); return; }); }); $(document).ready(function(){ $("#txtTitulo").focus(); }); </script> Estou com um problema num crud utilizando ajax, ele meio que "corrompe a string"... 
      ENVIO ASSIM
       
      ELE SALVA ASSIM
       
      Não estou utilizando nenhum editor nada, num textarea
      ESSE CODIGO
       
       
       
       
    • By wiccaale
      Um programa que leia e armazene em vetores até 1000 cpfs, 1000 nomes e 1000 salários (com precisão de duas casas decimais) enquanto a entrada de CPF for maior que zero. Ao final, o programa deverá apresentar a soma de todos os salarios, a média e quantos cpf validos foram cadastrados.
    • By Julio Albuquerque
      Olá!
      Preciso resolver um script MySql onde preciso efetuar cálculos como se fosse uma conta corrente, onde cada DIA tem um saldo anterior, total de entradas, total de saída e saldo atual do dia.
      Porém o próximo dia deverá ter como saldo anterior o saldo atual do dia anterior,ok?
      Bom, fiz um script que praticamente funcionou, porém em  uma subquery preciso passar o valor da linha da tabela que está sendo atualizada, mas isso não está sendo possível.
      Gostaria de ajuda, caso alguém tenha feito algo semelhante. Abaixo o script:
      update gestao_centro_financeiro_diario g1 set g1.vlsaldo_inicial = (case when idcentrofinanceirodiario = (select * from (select min(g2.idcentrofinanceirodiario) from gestao_centro_financeiro_diario g2 where g2.idcentrofinanceiro = 1) as inicial) then g1.vlsaldo_inicial else (select * from (select g3.saldo_atual from gestao_centro_financeiro_diario g3 where g3.idcentrofinanceirodiario = (select * from (select max(g4.idcentrofinanceirodiario) from gestao_centro_financeiro_diario g4 where g4.idcentrofinanceirodiario < g1.idcentrofinanceirodiario) as id)) as saldo) end), g1.saldo_atual = g1.vlsaldo_inicial + g1.total_entrada - g1.total_saida where g1.idcentrofinanceiro = 1 order by g1.data Meu problema está justamente quando no final do script, onde tem uma cláusula WHERE: ...where g4.idcentrofinanceirodiario < g1.idcentrofinanceirodiario) as id))...
      Onde a tabela g1 é a tabela que está sofrendo o UPDATE.
      Alguém pode ajudar como resolver? Desta ou de outra forma.
    • By asacap1000
      Galera não sei o porque mas n select abaixo eu preciso mostrar o ultimo registro de uma das datas que são lançadas.
      SELECT IO.ID_IN_OUT TICKET, TO_CHAR(IO.TIME_ARRIVAL, 'DD/MM/YYYY HH24:MI') CHEGADA, TO_CHAR(IO.TIME_RELEASE_IN, 'DD/MM/YYYY HH24:MI') LIBERADO, TO_CHAR(IO.TIME_IN, 'DD/MM/YYYY HH24:MI') ENTRADA, SUBSTR(SP.NAME, 0, 18) TRANSPORTADORA, SUBSTR(DR.NAME, 0, 18) MOTORISTA, VE.PLATE PLACA, (SELECT DISTINCT MAX(TOS.PLATZ) DOCA FROM PICKAUF PI, AUFTRAEGE TOS, (SELECT IO.ID_IN_OUT, MAX(IO.TIME_RELEASE_PP) TIME_RELEASE_PP, IOP.DOCUMENT, MAX(IO.TIME_OUT) TIME_OUT FROM IN_OUT IO, IN_OUT_POS IOP WHERE IO.ID_IN_OUT = IOP.ID_IN_OUT --AND IO.ART_IN_OUT IN ('CA', 'CCE', 'CC') AND IO.STAT <> '80' GROUP BY IOP.DOCUMENT, IO.ID_IN_OUT) SAD WHERE PI.CHARGE = TOS.NR_AUF AND SAD.ID_IN_OUT = IO.ID_IN_OUT AND SAD.DOCUMENT(+) = REPLACE(TRANSLATE(TOS.HINW_ZUST, '/-', ' '), ' ') GROUP BY SAD.ID_IN_OUT) DOCA FROM IN_OUT IO, SPEDITEURE SP, VEHICLE VE, TRACTOR TR, DRIVER DR WHERE IO.STAT <> '80' AND IO.TIME_ARRIVAL IS NOT NULL AND TR.ID_TRACTOR = IO.ID_TRACTOR AND DR.ID_DRIVER = IO.ID_DRIVER AND VE.ID_VEHICLE = IO.ID_VEHICLE AND IO.TIME_RELEASE_PP IS NULL AND SP.ID_SPEDITEUR = IO.ID_SPEDITEUR AND IO.ART_IN_OUT IN ('CA', 'CC', 'CCE', 'CV') and rownum = '1' ORDER BY TO_CHAR(IO.TIME_RELEASE_IN, 'DD/MM/YYYY HH24:MI') Neste Select temos as datas de CHEGADA, LIBERADO, ENTRADA. eu preciso mostrar o ultimo registro do LIBERADO. Eu já fiz um max porém não retornou.Ela será utilizada em um telão no pátio de uma empresa.
       
      O telão será desta forma
       

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.