2
respostas

Formato date e case sensitive

Para o campo date, o armazenamento está no formato AAAA/MM/DD. A clausula where referencia a data no formato que não é este. No exemplo funcionou mas quando faço o exercicio preciso alterar o formato para o que foi definido. Por quê isto acontece? Da mesma forma, quando digito ...like 'compras' não retorna nada. Preciso alterar para caixa alta 'COMPRAS' prá dar certo. É assim mesmo?

2 respostas

Felicia, no Postgresql, normalmente o formato de

  • date é yyyy-mm-dd e
  • datetime é yyyy-mm-dd hh:nn:ss.mmm
  • Mas numa consulta SQL, feita diretamente no cliente do banco, você pode usar aspas para passar diretamente o conteúdo, exemplo: datalancamento between '2019-04-24 23:26:58.000' and '2019-04-24 23:59:59.999' Se for via sistema, utilize variáveis de Bind, ou seja, passe o valor do filtro via parâmetro, no tipo datetime mesmo, para não ter confusão de formatação.
  • Você pode alterar os formatos de data e outras padronizações, nos arquivos de configuração, mas não é aconselhado, o melhor é aplicação formatar, conforme a necessidade do usuário.
  • quanto à dúvida sobre o like, é assim mesmo! se quiser outro comportamento, tente usar ilike

Felícia, quanto a questão do formato de data na consulta só interessa se é em inglês ou português para alguns meses, basta usar o padrão abaixo : SELECT * FROM COMPRAS WHERE DATA < '28 abr 2019' ;

se fosse em inglês ficaria assim: SELECT * FROM COMPRAS WHERE DATA< '28 apr 2019' ;

Quando ao like não entendi o que você está tentando buscar, mas não faz sentido usar o like em a expressão %, pois se você sabe toda a descrição do dado usa = ou in, então se você quer buscar tudo o que inicia com compras na coluna observação, por exemplo, ficaria assim: SELECT * FROM COMPRAS WHERE OBSERVACAO LIKE 'COMPRAS%'; ou SELECT * FROM COMPRAS WHERE OBSERVACAO LIKE 'compras%';

se quiser consultar todos que tenha a palavra compras em qualquer posição coloca o % antes também, conforme abaixo: SELECT * FROM COMPRAS WHERE OBSERVACAO LIKE '%COMPRAS%';