Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,549

    [sqlServer] query tra server e client con 2 formati data diversi

    salve a tutti
    ho un server con il formato data MM/dd/yyyy
    ed il client con il formato dd/MM/yyyy

    quando nel server vengono eseguite query contententi filtri per :
    codice:
     AND filtro = CONVERT( VARCHAR,'09-30-2022' ,103)
    va tutto bene

    ma quando ci prova il client che esegue
    codice:
     AND filtro = CONVERT( VARCHAR,'30-09-2022' ,103)
    ovviamente da errore
    La conversione del tipo di dati da char a datetime ha generato un valore di tipo datetime non compreso nell'intervallo dei valori consentiti.


    di base la query viene gestita in c# facendo una concatenazione con la query e il filtro
    come posso fare in modo che sul server riconosca anche la data del client come valida?

    Di base dovremmo distribuire il programma a piu client che hanno formati diversi di data in locale
    grazie
    so che di base dovrebbero seguire tutti il server, ma potrebbe capitare che il server si trovi in un'altro paese

    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  2. #2
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,254
    Il peccato originale è stato usare delle stringhe per salvarci una data.
    Detto questo, , quando fai la convert stai specificando 103 che significa dd/mm/yyyy e quindi salvi sempre la data in quel formato quando il campo è stringa.

  3. #3
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    @kahm
    non ho chiaro perché usi convert su una stringa per convertirla a stringa, oltretutto usando lo style sbagliato (103 vs 105).
    Da quello che mi pare di capire tu nel server hai una data (in stringa, quindi campo varchar) e la query funziona facendo:
    codice:
    AND filtro = CONVERT( VARCHAR,'09-30-2022' ,103)
    il che mi lascia pensare che stai semplicemente aggiungendo un convert in pi� per nulla, credo funzionerebbe lo stesso facendo cos�:
    codice:
    AND filtro = '09-30-2022'
    Al che ti si presenta (ovviamente) il problema se fai :
    codice:
    AND filtro = '30-09-2022'
    quindi per convertire la data nel formato del server partendo da una stringa (dd-MM-yyyy) dovresti fare questo:
    codice:
    convert(varchar,convert(date,'30-09-2022',105),110)
    Quindi converti la stringa in data (con formato "italiano", quindi 105) e dopo la data in stringa con formato USA (110). Allora in questo caso li trovo un senso, ma convertire da stringa a stringa non dovrebbe fare nulla... come gli spieghi che la tua stringa � una data in un detto formato? per lui � una stringa e boh... o almeno credo
    In ogni caso facendo la conversione tramite sql (come sopra) c'è sempre il dubbio di come arriva la stringa in base alla cultura, quindi va bene se lo fa il client italiano che usa il formato (dd-MM-yyyy) ma se poi lo fa un client diverso ovviamente cambia e non quadra più...
    Ovviamente a questo punto mi domando come mai non lavori direttamente facendo un ToString() in net specificando sempre il formato del server? Immaginando che hai gia il tipo datetime ti basta fare ToString("MM-dd-yyyy") per "stampare" la stringa 09-30-2022. Nel caso lavori solo con stringhe ti sarebbe comunque utile trasformare la stringa in datetime (DateTime.Parse(dataStringa) questo prende la culture di default, quindi va sempre bene) e poi fai sempre un ToString("MM-dd-yyyy") in modo che il formato sia sempre 09-30-2022
    A dire il vero la vera domanda é: come mai non lavori con il tipo data sul database?
    Ultima modifica di U235; 09-09-2022 a 19:52

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    .

  5. #5
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,549
    Quote Originariamente inviata da U235 Visualizza il messaggio
    @kahm
    come mai non lavori con il tipo data sul database?
    ho fatto uno sbaglio nello scrivere la query , grazie di evidenziare l'errore
    lunedi la provo con convert in date visto che il campo è in formato datetime
    e ti faccio sapere
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    Quote Originariamente inviata da Kahm Visualizza il messaggio
    ho fatto uno sbaglio nello scrivere la query , grazie di evidenziare l'errore
    lunedi la provo con convert in date visto che il campo è in formato datetime
    e ti faccio sapere
    ah ok, ho capito. Quindi se il campo é già una data allora ti basta un solo "convert" (ecco perché la tua query...) quindi se la data é già di tipo DateTime:

    codice:
    convert(varchar,MyDateTime,110)
    Questo dovrebbe convertirti la data sempre nel formato USA (110, quindi 09-30-2022). Ovviamente da provare.
    Non avevo capito io che la tua data in stringa era puramente indicativa, ma che in realtà la data era già datetime. L'unico errore quindi sarebbe lo style 110 vs 103. Che poi anche Uranio lo aveva detto...

  7. #7
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,549
    Quote Originariamente inviata da U235 Visualizza il messaggio
    sarebbe lo style 110 vs 103. Che poi anche Uranio lo aveva detto...
    Infatti provando sul loro server mi funziona perfettamente
    nel mio sql server con data italiana...ecco errore
    codice:
    AND CONVERT( datetime,'09-30-2022' ,103)
    Messaggio 242, livello 16, stato 3, riga 2
    La conversione del tipo di dati da char a datetime ha generato un valore di tipo datetime non compreso nell'intervallo dei valori consentiti.


    Ora di completamento: 2022-09-12T08:54:21.4980953+02:00
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  8. #8
    ma tu alla query passi una data in formato datetime o una data in formato stringa?

  9. #9
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,549
    formato stringa
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  10. #10
    se potessi passare un datetime probabilmente non avresti questi problemi

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 © 2024 vBulletin Solutions, Inc. All rights reserved.