Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di reiziel
    Registrato dal
    Jun 2007
    Messaggi
    144

    date mysql in formato italiano?

    Ho un problemino con una semplice query che dovrebbe ricavarmi dei risultati che hanno come data appuntamento da $data1 a $data2 :

    "SELECT * FROM `appuntamenti` WHERE `Data Appuntamento` BETWEEN '$data1' AND '$data2' ORDER BY `Data Appuntamento` ASC"

    il problema è che se inserisco ad esempio 02/06/2009 a 03/06/2009 ( dd/mm/yyyy )
    mi calcola da 06/02/2009 a 06/03/2009 quindi in formato mm/dd/yyyy

    come posso cambiare il formato da quello inglese a quello italiano , ho letto un po su internet e sono arrivato massimo a " select date_format(NOW(),"%d-%m-%Y %T"); " che mi da come risultato la data attuale con ora

    cosa mi consigliare per risolvere il problema?

    Silence please work in progress

  2. #2
    prima di tutto necessita sapere in quale formato hai memorizzato le date.

    Ammesso che le date siano presenti in un campo DATE tieni presente che presentare una data simile 06/02/2009 verra' interpretata come:

    06 = anno a due cifre
    02 = mese
    20 = giorno
    09 eccedente. Non considerato.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    218
    select date_format(NOW(),"%d-%m-%Y %T")

    Se ci metti NOW() è ovvio che ti calcola la data ORA. Now -> ora. Semplice

    Mettici al posto del NOW() il campo della data.

    SELECT date_format(Data Appuntamento,"%d-%m-%Y %T")

  4. #4
    Utente di HTML.it L'avatar di reiziel
    Registrato dal
    Jun 2007
    Messaggi
    144
    uhm è piu complicato di quanto previsto

    quella stringa mi converte la data originale dei database mysql settata su YYYY-MM-DD in quella che decido io , ma io nel database ho gia le data in DD-MM-YYYY , ma il database non mi esegue correttamente la query con betweed da una data a unaltra

    si sono fatte le 5 ho fatto miriade di prove , ma ho notato che mi converte solo le data nel formato originale nel formato che voglio io , mentre le altra da risultato NULL

    Non so proprio come devo fare , intendo realizzare un form come campo
    "da data " - "a data " , ma non so davvero come fare , o almeno come risolvere con unaltra idea
    Silence please work in progress

  5. #5
    Utente di HTML.it L'avatar di reiziel
    Registrato dal
    Jun 2007
    Messaggi
    144
    dopo 1 altra ora sono arrivato a questo:
    select STR_TO_DATE(`Data Appuntamento`,'%d/%m/%Y') FROM appuntamenti

    che mi funge , traducendomi i miei dd/mm/yyyy nel formato originale yyyy/mm/dd

    ma sto perdendo la testa xche nn riesco ad aggiungerci poi il between tra date:


    select STR_TO_DATE(`Data Appuntamento`,'%d/%m/%Y') FROM appuntamenti WHERE `Data Appuntamento` BETWEEN '02/06/2009' AND '03/06/2009' ORDER BY `Data Appuntamento` ASC

    la ricerca nel where devo metterla ancora nel formato italiano e ovviamente la ricerca è sballata



    dovrei tipo unire 2 query dove in una faccio diventare tutte le date in formato originale e nella seconda faccio la ricerca

    ho provato con

    select STR_TO_DATE(`Data Appuntamento`,'%d/%m/%Y') FROM appuntamenti UNION SELECT * FROM `appuntamenti` WHERE `Data Appuntamento` BETWEEN '2009/03/03' AND '2009/04/04' ORDER BY `Data Appuntamento` ASC

    ma dice #1222 - La SELECT utilizzata ha un numero di colonne differente
    Silence please work in progress

  6. #6
    stai annaspando nel classico bicchiere d'acqua.

    per prima cosa direi che dovresti normalizzare in formato ANSI le date che hai memorizzato e cioe' portarle da (es.) "02/06/2009" a "2009-06-02".

    Fatto questo potrai gestire le date facilmente con tutte le funzioni a disposizione senza dover convertire e riconvertire i vari formati.

    Ad ogni modo.... str_to_date() converte il contenuto del campo da stringa "02/06/2009" a data "2009-06-02". E questo lo fai nella SELECT ma non lo fai nel where.

    Vediamo come dovrebbe essere la query SQL:

    codice:
    SELECT Data_Appuntamento
    FROM appuntamenti 
    WHERE STR_TO_DATE(`Data_Appuntamento`, '%d/%m/%Y') 
          BETWEEN 
          STR_TO_DATE('03/03/2009', '%d/%m/%Y')
          AND
          STR_TO_DATE('04/04/2009', '%d/%m/%Y')
    ORDER BY STR_TO_DATE(`Data_Appuntamento`, '%d/%m/%Y') ASC
    Se invece vuoi fare le cose per bene attualizzi il campo varchar dove hai messo la data in un campo DATE e la query diventera':

    codice:
    SELECT Data_Appuntamento
    FROM appuntamenti 
    WHERE `Data_Appuntamento` 
          BETWEEN 
          STR_TO_DATE('03/03/2009', '%d/%m/%Y')
          AND
          STR_TO_DATE('04/04/2009', '%d/%m/%Y')
    ORDER BY `Data_Appuntamento` ASC
    Nella union il numero e tipo dei campi deve essere lo stesso in entrambe le query. Quindi non puoi selezionare un campo nella prima e * nella seconda.

    Aggiungerei ancora di non mettere spazi nei nomi di campo come non andrebbero messi nei nomi di file ed anche di utilizzare solo le minuscole se ti vuoi garantire una portabilita' verso altri sistemi (es. server su linux) senza dover riscrivere tutto.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.