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 MayraAmaral
      Olá. Estou com problema no meu código php, o update funciona mas quando foi editar aparece todos os alunos na mesma pagina e o código só edita o primeiro.
      Alguém sabe algum jeito de aparecer um aluno só na pagina e editar.
      Quem puder ajudar agradeço muito.
       
       
      editar.php 
      <?php session_start(); $idLogado = $_SESSION['id']; $id_aluno = $_SESSION['id']; $id_responsavel = $_SESSION['id_responsavel']; ?> <!-- Begin Page Header--> <div class="row"> <div class="page-header"> <div class="d-flex align-items-center"> <h2 class="page-header-title">Editar Aluno</h2> <div class="page-header-tools"> <a class="btn btn-gradient-01" href="<?php echo $site_URL; ?>alunos">Alunos cadastrados</a> </div> </div> </div> </div> <!-- End Page Header --> <!-- Begin Row --> <div class="row flex-row"> <div class="col-xl-12 col-12"> <div class="widget has-shadow"> <div class="widget-body"> <?php $query = mysqli_query($conexao, "SELECT * FROM alunos WHERE id='$id_aluno' AND id_responsavel='$idLogado'"); while($ver = mysqli_fetch_array($query)) { $id_aluno = $ver['id']; $nome_aluno = $ver['nome']; $aluno_sobrenome = $ver['sobrenome']; $nascimento_aluno = $ver['data_nasc']; ?> <form id="editarAluno" action="javascript:func()" method="post"> <input type="hidden" id="id" name="id" value="<?php echo $ver['id']?>"> <input type="hidden" id="id_responsavel" name="id_responsavel" value="<?php echo $ver['id_responsavel']?>"> <div class="form-group row d-flex align-items-center mb-5"> <div class="col-lg-9"> <div class="form-group"> <div class="input-group"> <span class="input-group-addon addon-primary"> <i class="la la-user"></i> </span> <input type="text" name="nome" id="nome" value="<?php echo $ver['nome'];?>" class="form-control" required=""> </div> </div> <small>Nome do aluno.</small> </div> </div> <div class="form-group row d-flex align-items-center mb-5"> <div class="col-lg-9"> <div class="form-group"> <div class="input-group"> <span class="input-group-addon addon-primary"> <i class="la la-user"></i> </span> <input type="text" name="sobrenome" id="sobrenome" value="<?php echo $ver['sobrenome'];?>" class="form-control" required=""> </div> </div> <small>Sobrenome do aluno.</small> </div> </div> <div class="form-group row d-flex align-items-center mb-5"> <div class="col-lg-9"> <div class="form-group"> <div class="input-group"> <span class="input-group-addon addon-primary"> <i class="la la-calendar"></i> </span> <input maxlength="10" onKeyUp="barra(this)" name="nascimento" type="text"date-format="DD/MM/YYYY" class="form-control" id="date" value="<?php echo $ver['data_nasc'];?>"> </div> </div> <small>Data de nascimento, fomato 00/00/0000.</small> </div> </div> <div class="form-group row d-flex align-items-center mb-5"> <div class="col-lg-9"> <div class="form-group"> <button type="submit" class="btn btn-gradient-03 mr-1 mb-2">Editar aluno</button> </div> </div> </div> </form> <?php }?> </div> </div> </div> </div> <!-- End Row -->  
    • By Jefferson andre
      Ola, estou criando um contador de acessos diario mas nao funciona, a tabela tem o campo data no formato date e o campo contador int(10)
       
      A ideia eh verificar a data e se nao existir incluir na tabela, se existir adicionar ao contador
       
      Parece que o erro esta no formato da data, nem manualmente consigo incluir na tabela via localhost ou na hospedagem da google
       
      Agradeço qualquer ajuda
       
      <?php // fazendo uma conexão com o banco de dados include("conexao.php"); // grava a data atual em uma variavel date_default_timezone_set('America/Sao_Paulo'); $date = date('d-m-Y'); //$sql = "SELECT codigo FROM contador"; $resultado = $arquivo->query("SELECT data,contador FROM contador_diario WHERE data = '$date'"); if (mysqli_num_rows($resultado)== true){ // registro ja existe } else { // resultado nao encontrado entao inserir $sql = "INSERT INTO contador_diario ('data', 'contador') VALUES ('$date', '1')"; if ($arquivo->query($sql) == TRUE) { echo "Data cadastrada com sucesso"; } else { echo "Erro: " . $sql . "<br>" . $arquivo->error; } } // refaz a pesquisa para registrar o contador $resultado = $arquivo->query("SELECT data,contador FROM contador_diario WHERE data = '$date'"); // igualar a array a uma variavel $linha=mysqli_fetch_array($resultado); $cod_2 = $linha["contador"]+1; // lista a variavel //echo "<font face='Arial'><span class='style14'>$cod_2</span></font>"; $sql = "UPDATE contador_diario SET contador=$cod_2"; if ($arquivo->query($sql) === TRUE) { // echo "Alteração efetuada com sucesso"; } else { // echo "Erro alterando o contador de visitas diario" . mysqli_error($arquivo); } // fecha a conexao mysqli_close($arquivo); ?>  
    • By Bruno Goedert Dalmolin
      Não consigo apresentar as palavras equivalentes conseguem me ajudar???
      O código é o seguinte: 
       
      #include <stdio.h>
      char equivale(int ddd){
          switch(ddd){
              case 61:
                  return "Brasilia";
                  break;
              case 71:
                  return "Salvador";
                  break;
              case 11:
                  return "Sao Palo";
                  break;
              case 21:
                  return "Rio de Janeiro";
                  break;
              case 32:
                  return "Juiz de Fora";
                  break;
              case 19:
                  return "Campinas";
                  break;
              case 27:
                  return "Vitoria";
                  break;
              case 31:
                  return "Belo Horizonte";
                  break;
          }
      }
      int main(){
          int ddd;
          scanf("%d",&ddd);
          equivale(ddd);
          printf("%d",equivale(ddd));
      }
    • By AlexandreHenrique
      Olá 
      tenho uma função JS para mudar valor de atributos de uma imagem.
      A imagem é essa:
      <img src="capa.jpg"  data-desc="2018 - Aventura" alt="titulo do filme" onclick="teste(this,2);" id="video" />  A função:
      function teste(arg,p){ var pos = p; document.getElementById('video').src="novacapa.jpg"; // muda src document.getElementById('video').alt="Titulo do novo video"; // muda alt     document.getElementById('video').attr('data-desc', 'valor a atribuir'); // ??? } A função muda o "src" e "alt" mas não consigo mudar o valor do atributo 'data-desc", como faço isso?
      Essa é a linha em questão: 
      document.getElementById('video').attr('data-desc', 'valor a atribuir'); 
       
       
    • By Highlander1901
      Senhores, buenas... não consigo efetuar esse SELECT, e já quebrei a cabeça pra dar certo. Podem me ajudar?
       
      SELECT
               "A"."CCUSTO" as "Célula",
               "A"."IDCONTR" as "Matrícula",
               "A"."NOME",
               "A"."SINDICATO",
               "A"."DESCEVENTO",
               "A"."LOCAL",
               (HOUR("A"."JAN") + (MINUTE("A"."JAN") / 60)) as "Mes Anterior",
               (HOUR("A"."FEV") + (MINUTE("A"."FEV") / 60)) as "Mes Atual",
               ((HOUR("A"."JAN") + (MINUTE("A"."JAN") / 60)) -(HOUR("A"."FEV") + (MINUTE("A"."FEV") / 60))) as "Crescimento",
               (MINUTE("A"."FEV") / 60) as "Minutos"
      FROM  "BD_HORAS" AS  "A" 
      WHERE     "A"."CCUSTO"  = '113'
       OR    "A"."CCUSTO"  = '432'
       
      Detalhes de erro:
      Qualquer uma das opções abaixo poderia ser a possibilidade para o erro:

      1. Poderia haver tipos incompatíveis de dados em um dos lados do operador comparador. Nesse caso, converta as colunas e tente novamente.

      2. Não há função correspondente ao nome  e argumento fornecidos. Você pode precisar adicionar conversões do tipo explícita.   Obs.: Sempre utilizei esse código, o que alterava era apenas o as colunas "JAN" e "FEV", dependendo do avanço dos meses.
       
      HEEEELP!
×

Important Information

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