Tiagoinf Posted June 20, 2022 at 09:31 AM Report #626258 Posted June 20, 2022 at 09:31 AM (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 June 20, 2022 at 09:39 AM by Tiagoinf
M6 Posted June 20, 2022 at 09:42 AM Report #626259 Posted June 20, 2022 at 09:42 AM 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."
Tiagoinf Posted June 20, 2022 at 10:16 AM Author Report #626260 Posted June 20, 2022 at 10:16 AM (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 June 20, 2022 at 10:28 AM by Tiagoinf
M6 Posted June 20, 2022 at 11:46 AM Report #626261 Posted June 20, 2022 at 11:46 AM 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: 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. 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. Depois de garantires que os dados da tabela auxiliar estão bem, fazes drop à tabela atual. 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."
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now