Jump to content

Recommended Posts

Posted (edited)

Ola a todos,

Estou a fazer um SELECT com um filtro por datas, acontece que a data esta a ser guardada da seguinte forma: 20/JUN/2022 que na realidade é 20/06/2022. Como é que posso fazer para no select ele mostrar a data assim "20/06/2022" para depois poder filtrar por data?

$query = "SELECT datacompra, dataVencimentocompra from $table WHERE active=1 and datacompra>= '$inicio' AND datacompra<= '$fim';";

Ja uso uma funçao para me identificar o mes mas nao sei como a posso usar no select.

function parseDate($date = null, $order = null) {
  if (empty($date)) { 
    $today = date_create('now', new DateTimeZone('Europe/Lisbon')); 
    $date = $today->format("d/m/Y"); 
  } 
  $arrayDatePayment= explode("/",$date); 
  $invoiceDay = $arrayDatePayment[0]; 
  $invoiceMonth = $arrayDatePayment[1]; 
  $invoiceYear = $arrayDatePayment[2]; 
  $parsedMonth = ""; switch ($invoiceMonth) {
    case "JAN": 
      $parsedMonth = "01"; 
      break; 
    case "FEV": 
      $parsedMonth = "02";
      break; 
      ..... 
        default: 
      $parsedMonth = $invoiceMonth; 
      break; } 
  $newInvoiceDate= $invoiceDay."-".$parsedMonth."-".$invoiceYear; return $newInvoiceDate; }

alguem por ai que pode ajudar?

Edited by Tiagoinf
Posted

O teu problema, e respetiva solução, não está no PHP mas sim na base de dados.

As datas não são guardadas em formatos, são, tipicamente, representadas por um inteiro.
Há uma diferença entre o valor e a representação do valor.
O que isto quer dizer é que a data é única mas pode ser representada de várias formas, e.g. 'yyyy-mm-dd', 'dd-mm-yyyy', 'd/m/yy', etc..
A data será mostrada dependendo da parametrização do formato que está em vigor.

Uma forma de garantir que ela é sempre mostrada da mesma forma, na query mandas converter o campo para um varchar aplicando um determinado formato de data.
Vê na documentação da base de dados os formatos e funções disponíveis.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted (edited)
45 minutos atrás, M6 disse:

O teu problema, e respetiva solução, não está no PHP mas sim na base de dados.

As datas não são guardadas em formatos, são, tipicamente, representadas por um inteiro.
Há uma diferença entre o valor e a representação do valor.
O que isto quer dizer é que a data é única mas pode ser representada de várias formas, e.g. 'yyyy-mm-dd', 'dd-mm-yyyy', 'd/m/yy', etc..
A data será mostrada dependendo da parametrização do formato que está em vigor.

Uma forma de garantir que ela é sempre mostrada da mesma forma, na query mandas converter o campo para um varchar aplicando um determinado formato de data.
Vê na documentação da base de dados os formatos e funções disponíveis.

Obrigado pela resposta.

Sim eu sei que o problema esta na forma como guardo a data na tabela e nao no php.

O campo datacompra ja é varchar. 

Ao tentar converter da null

Edited by Tiagoinf
Posted

Viva. 🙂

Ok, tens um erro de desenho que necessitas de resolver. A data devia ser do tipo date e não varchar.
Isso resolve-se, dá algum trabalhinho, mas resolve-se.
Sem estar por dentro da base de dados é difícil dar uma resposta otimizada, mas deixo-te a solução genérica:

  1. Crias uma tabela temporária com a estrutura como deve ser, ou seja, uma réplica da tabela com o campo da data com o tipo certo.
  2. Fazes um insert from select, ou seja, fazes um insert na tabela auxiliar a partir de um select da tabela atual onde convertes as datas que estão em varchar em datas "reais", vê a documentação da base de dados para ver como usas funções de conversão de varchar para date.
  3. Depois de garantires que os dados da tabela auxiliar estão bem, fazes drop à tabela atual.
  4. Renomeias a tabela atual para ter o nome da tabela final, caso não seja possível renomear a tabela, basta usares a mesma estratégia: crias a tabela final e copias os dados da tabela auxiliar para lá com um insert from select.
10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

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
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.