none
Conversion failed when converting date and/or time from character string. RRS feed

  • Domanda

  • Salve a tutti,

    Durante l'esecuzione di questa query mi viene restituito kil seguente errore:

    "Conversion failed when converting date and/or time from character string."

    Il problema penso sia nella condizione where Year(TBL_S_CASA.anno_s_casa)='2011'.

    Nella mia tabella il campo "anno_s_casa" è di tipo nvarchar() [in questo formato (2011-03-2)]

    Come posso risolvere il mio problema? 

    SELECT YEAR(TBL_S.data_nascita) AS data_nascita, TBL_CITTA.id_citta 
    FROM TBL_CITTA INNER JOIN TBL_PROVINCIA ON TBL_CITTA.provincia_id = TBL_PROVINCIA.id_provincia INNER JOIN TBL_CASA ON TBL_CITTA.id_citta = TBL_CASA.citta_id INNER JOIN 
    TBL_S_CASA ON TBL_CASA.id_casa = TBL_S_CASA.casa_id INNER JOIN TBL_S ON TBL_S_CASA.suora_id = TBL_S.id_suora 
    WHERE TBL_PROVINCIA.id_provincia='55' AND YEAR(TBL_S_CASA.anno_s_casa)='2011'


    sabato 16 marzo 2013 11:10

Risposte

  • Ciao,

    la vera risoluzione del problema sarebbe avere i due campi di cui fai la YEAR con il tipo di dato corretto, ovvero il DateTime (o date, ..).

    Se lo tieni stringa, mi spiace ma non puoi far più di tanto. L'unica è controllare con un ISDATE() magari, ma io ti consiglio di fare pulizia del dato ed impostare il corretto datatype. In fondo se è una data, come mai dovrebbe essere stringa? Il tipo di dato è una cosa importante nel design di una struttura. Non lavorerei sul cast implicito sinceramente.


    Alessandro Alpi SQL Server MVP

    martedì 19 marzo 2013 09:23
    Moderatore

Tutte le risposte

  • Il fatto che il campo sia in formato UNICODE non ti cambia nulla, il problema probabilmente sta proprio nel casting implicito che viene fatto quando usi la funzione YEAR().

    Conta che tu hai due casting impliciti su due campi diversi :

    YEAR(TBL_S.data_nascita) e YEAR(TBL_S_CASA.anno_s_casa).. verifica innanzi tutto la castabilità delle due colonne a datetime.. e attento perché a volte SQL nei casting impliciti delle stringhe può confondere il mese e il giorno, col risultato che alcune stringhe sono castabili (erroneamente) in due modi (vedi quando il mese e il giorno vengono scambiati ed il giorno è inferiore a 12)

    Un saluto

    lunedì 18 marzo 2013 10:00
  • Ciao,

    la vera risoluzione del problema sarebbe avere i due campi di cui fai la YEAR con il tipo di dato corretto, ovvero il DateTime (o date, ..).

    Se lo tieni stringa, mi spiace ma non puoi far più di tanto. L'unica è controllare con un ISDATE() magari, ma io ti consiglio di fare pulizia del dato ed impostare il corretto datatype. In fondo se è una data, come mai dovrebbe essere stringa? Il tipo di dato è una cosa importante nel design di una struttura. Non lavorerei sul cast implicito sinceramente.


    Alessandro Alpi SQL Server MVP

    martedì 19 marzo 2013 09:23
    Moderatore
  • Grazie per le risposte!

    Ho risolto impostando i campi a date..

    martedì 19 marzo 2013 16:25
  • Bene così ;)

    ti consiglio di tipizzare sempre correttamente i campi data, possono trasformarsi in delle bombe ad orologeria non indifferenti!

    martedì 19 marzo 2013 16:28
  • Ti chiedo cortesemente di chiudere il post accettando le risposte che ti sono state utili, grazie.


    Alessandro Alpi SQL Server MVP

    martedì 19 marzo 2013 16:43
    Moderatore