Ir para conteúdo
ClBr

[Resolvido] Erro ao colocar um AND após o BETWEEN

Recommended Posts

Boa tarde amigos, estou tentando rodar o comando abaixo, porém o BD simplesmente não retorna nada.. Se eu deixar somente o BETWEEN ele retorna tranquilo, porém eu preciso somente das notas que são série 2.. Já pensei em colocar os comandos separados, porém não achei uma solução para ordenar tudo depois.. Como poderia fazer isso?

 

SELECT cod, forma_pagamento, cod_emissor, cod_cliente, tipo_pessoa, valor, data FROM tabela_notas WHERE data BETWEEN '22/04/2019' AND '23/06/2019' AND serie = 2 ORDER BY cod DESC;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o "type" de serie ?

 

Tentou todar o sql sem a condição da data ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É do tipo int(1), sim, tentei colocar só com a condição de serie e só com a condição da data e foi normal.. Quando coloco a condição OR ao invés do AND ele faz a consulta normalmente, mas não resolve o problema..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente era o problema na formatação das datas na hora da consulta, como estão sendo armazenadas no tipo 'dd/MM/yyyy' e em varchar, dava um conflito no BETWEEN.. Foi resolvido com o seguinte comando:

 

SELECT cod, forma_pagamento, cod_emissor, cod_cliente, tipo_pessoa, valor, data
FROM tabela_notas
WHERE DATE_FORMAT(STR_TO_DATE(data, '%d/%m/%Y'), '%Y-%m-%d')
      BETWEEN DATE_FORMAT(STR_TO_DATE('22/04/2019', '%d/%m/%Y'), '%Y-%m-%d')
      AND DATE_FORMAT(STR_TO_DATE('23/06/2019', '%d/%m/%Y'), '%Y-%m-%d')
      AND serie = 2
ORDER BY cod DESC;

 

Obrigado Motta.. Ajudou bastante..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Ruyter
      Estou com problema para resolver uma solução que estou necessitando. Toda ajuda será bem-vinda!
       
      Tenho uma tabela onde há vários registros com um mesmo IDENTIFICADOR e vários INDENTIFICADORES diferentes em uma mesma coluna.
      Como percorrer os registros de uma tabela, com base nos IDENTIFICADORES?
      Preciso também analisar um período por data (>= e <=) e ABSTRAIR deste período o valor MIN e MAX de uma outra coluna
      Esta consulta precisa ser realizada em cada IDENTIFICADOR DISTINTO?
       
      Já utilizei o BETWEEN, mas ao usar o código com o foreach() no PHP ele lê apenas um registro.
      O código que estou trabalhando é este:
       
      SELECT conf_hidro_inatividade, cons_reg_ident_iot, cons_data, MIN(cons_leitura_atual), MAX(cons_leitura_atual), hidro_valvula, hidro_cliente FROM tab_conf_hidro, tab_consumo INNER JOIN tab_hidrometros ON cons_reg_ident_iot = hidro_ident_iot WHERE cons_reg_ident_iot = '20220701001' and conf_hidro_inatividade = 'sim' and hidro_valvula = 'aberta' and cons_data BETWEEN '2022-10-10' and '2022-10-13';  
      Com:

       
      SELECT conf_hidro_inatividade, cons_reg_ident_iot, cons_data, cons_leitura_atual, hidro_valvula, hidro_cliente /*(sem o MIN e MAX na mesma coluna)*/ WHERE cons_reg_ident_iot != ' ' and conf_hidro_inatividade = 'sim' and hidro_valvula = 'aberta';  
      usando dentro do foreach(), percorre todos os registros.
    • Por Felipe Guedes Coutinho
      Galera, venho contribuindo com diversas dúvidas, mas hoje quem está com uma dúvida sou eu.
       
      Cenário - Gerar Dados para Relatório de Faturamento.
      Objetivo - Obter os valores totais das tabelas de Compra, Venda e Despesa agrupados por mês através de SUM dentro do "periodo" passado pela tela de consulta do relatório.
      Problema - Não existe um relacionamento entre as tabelas e eu preciso obter os resultados por 1 (UM) único select pois a cada registro lido com os valores totalizados e agrupados por mês eu movimento para um array onde o resultado do array é movimentado para um Chart do Google que gera um gráfico.
       
      Insumos:
      Tabela compra

      RESULTADO SEPARADO DA TABELA COMPRA
      SELECT  sum(vlr_pago),
              CASE extract(MONTH from dt_registro_compra)
                  WHEN 1 THEN 'Janeiro'
                  WHEN 2 THEN 'Fevereiro'
                  WHEN 3 THEN 'Março'
                  WHEN 4 THEN 'Abril'
                  WHEN 5 THEN 'Maio'
                  WHEN 6 THEN 'Junho'
                  WHEN 7 THEN 'Julho'
                  WHEN 8 THEN 'Agosto'
                  WHEN 9 THEN 'Setembro'
                  WHEN 10 THEN 'Outubro'
                  WHEN 11 THEN 'Novembro'
                  WHEN 12 THEN 'Dezembro'
              END AS mes
              FROM db_pescado_gelo.sqltb_compra
              WHERE dt_registro_compra between '2019-01-01' and '2019-12-31'
      group by mes
      order by dt_registro_compra asc
       
      RESULTADO:

       
      Tabela Venda

      RESULTADO SEPARADO DA TABELA VENDA
      SELECT  sum(vlr_vale),
              CASE extract(MONTH from dt_registro_venda)
                  WHEN 1 THEN 'Janeiro'
                  WHEN 2 THEN 'Fevereiro'
                  WHEN 3 THEN 'Março'
                  WHEN 4 THEN 'Abril'
                  WHEN 5 THEN 'Maio'
                  WHEN 6 THEN 'Junho'
                  WHEN 7 THEN 'Julho'
                  WHEN 8 THEN 'Agosto'
                  WHEN 9 THEN 'Setembro'
                  WHEN 10 THEN 'Outubro'
                  WHEN 11 THEN 'Novembro'
                  WHEN 12 THEN 'Dezembro'
              END AS mes
              FROM db_pescado_gelo.sqltb_venda
              WHERE dt_registro_venda between '2019-01-01' and '2019-12-31' 
      group by mes
      order by dt_registro_venda asc
       
      RESULTADO:

       
      Tabela Despesa

      Sei que devo colocar dt_pagamento is not null
      RESULTADO SEPARADO DA TABELA DESPESA
      SELECT  sum(vlr_pago),
              CASE extract(MONTH from dt_pagamento)
                  WHEN 1 THEN 'Janeiro'
                  WHEN 2 THEN 'Fevereiro'
                  WHEN 3 THEN 'Março'
                  WHEN 4 THEN 'Abril'
                  WHEN 5 THEN 'Maio'
                  WHEN 6 THEN 'Junho'
                  WHEN 7 THEN 'Julho'
                  WHEN 8 THEN 'Agosto'
                  WHEN 9 THEN 'Setembro'
                  WHEN 10 THEN 'Outubro'
                  WHEN 11 THEN 'Novembro'
                  WHEN 12 THEN 'Dezembro'
              END AS mes
              FROM db_pescado_gelo.sqltb_despesa
              WHERE dt_pagamento between '2019-01-01' and '2019-12-31'
                AND dt_pagamento is not null
      group by mes
      order by dt_pagamento asc
       
      RESULTADO:

       
       
      O resultado que eu gostaria é algo parecido com isso:
       
      TABELA DE VENDA TABELA DE COMPRA TABELA DE DESPESA - - R$ 31.272,55 Julho - - Agosto R$ 3.796,53 R$ 20.687,20 Agosto R$ 3.796,53 Agosto  
      Esse resultado eu "preciso" que seja através do retorno do um único SELECT, se alguém puder me ajudar, ficarei muito agradecido.
       
      Se puderem dar uma forã agradeço @Motta ; @Omar~ ; @Maujor ; @gabrielms 
       
      Att.
      Felipe Coutinho
    • Por Luis Fernando R. Valle
      Boa tarde.
      Tenho um agendamento para inserir. Mas antes de inserir, preciso validar para ver se não há agendamento no intervalo selecionado
       
      Hoje estou fazendo 2 campos para data inicial e final e 2 campos para horario inicial e final, mas não estou conseguindo.
      Se puder me passar se a melhor forma e o datetime e como fazer essa consulta no banco.
       
      Desde já agradeço.
    • Por Santos_2015
      Galera,
      preciso de uma ajuda aqui,
      tenho campo do tipo data(Y-m-d) , dependendo de minha busca vou usa-ló com between ou não, segue sql:
       
      ... where situacao like :situacao_pagamento and data_pagamento if(:data_inicio and :data_fim = null,is null, between :data_inicio and :data_fim) tentei fazer com if
      se data_incio e data_final (parâmetros passados) for null, recebe is null(para comparar com o campo data_pagamento), caso contrario iriar entrar no beween...
      mas não rolou...
       
       
    • Por Gabriel Jansen
      Boa tarde!
       
      Não sei se seria o lugar correto mas queria deixar uma pequena colaboração, em meio a pesquisa na internet não achei uma forma para o asp clássico de fazer replace entre duas variáveis definida e tentei estudar um pouco sobre replace e não consegui entender ao certo, então apelei.
       
      Em meio ao texto pode ser que precise remover algo que está entre o determinada parte do conteúdo, ex: Abacaxi <0,1111> desidratado,  para Abacaxi desidratado.
      Criei a função abaixo:
      FUNCTION REPLACE_ENTRE(VARIAVEL,INICIO,FIM) TEXTO=VARIAVEL INICIA=split(TEXTO,INICIO) IF Ubound(INICIA)>"0" Then FINALIZA=split(INICIA(1),FIM) REPLACE_ENTRE=INICIA(0)&""&FINALIZA(1) ELSE REPLACE_ENTRE=TEXTO END IF END FUNCTION Para fazer o replace chama ela dessa forma, caso queira pode fazer a alteração dos caracteres para qualquer um que deseja (desde que haja diferença entre elas tipo: [ , ], <,>, sx, xs):
      REPLACE_ENTRE("Variavel que deseja fazer replace","caractere que identifica inicio","caractere que identifica o final") Quero retirar uma parte do texto onde fica entre os caracteres "[" e "]".
      Há quem o faça [mas não o aconselha] por isso não o farei.
       
      FUNCTION REPLACE_ENTRE(VARIAVEL,INICIO,FIM) TEXTO=VARIAVEL INICIA=split(TEXTO,INICIO) IF Ubound(INICIA)>"0" Then FINALIZA=split(INICIA(1),FIM) REPLACE_ENTRE=INICIA(0)&""&FINALIZA(1) ELSE REPLACE_ENTRE=TEXTO END IF END FUNCTION TEXTO="Há quem o faça [mas não o aconselha] por isso não o farei." TEXTO=REPLACE_ENTRE(TEXTO,"[","]") Imprimindo a variável ela ficará assim:
      Há quem o faça por isso não o farei. É isso ai
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.