Visualizzazione dei risultati da 1 a 5 su 5

Discussione: DATEDIFF e SQL

  1. #1

    DATEDIFF e SQL

    Buongiorno a tutti come sempre e grazie sin da ora per quanti leggeranno il mio argomento.

    Problema, sto cambiando server per il mio sito ed anche database, da access a mssql.

    Ho un problema su una query che mi dovrebbe restituire dei record che risultino più vecchi di 30 giorni a partire da una data in tabella fino al giorno in cui viene lanciata la query.

    La query è la seguente:

    SELECT * FROM MIA_TABELLA WHERE (DATEDIFF([day],CAMPO_DATA,'" & GETMYDATE & "' ) > 30)

    CAMPO_DATA è un varchar 10 contenente la data in formato gg/mm/aaaa
    GETMYDATE è una funzione realizzata da me che restituisce la data odierna in formato gg/mm/aaaa (il server su cui risiede il DB è americano e quindi GETDATE() mi restituisce il formato non desiderato)

    L'errore che ricevo è:

    Microsoft OLE DB Provider for SQL Server error '80040e07'

    The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

    Ora, in locale funziona correttamente, in remoto no.

    Ho provato ad utilizzare la funzione CAST, CONVERT, ma nulla, sempre lo stesso errore.

    Idee?

    Grazie e buona giornata.
    ...God must love stupid people...He made so many...

    www.eurodomus.org

  2. #2
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,031
    non è che magari rompe per il formato gg/mm invece che mm/gg?

  3. #3
    Può anche essere.....

    Il punto è che nel campo data della tabella i dati li ho già in formato gg/mm/aaaa.

    Il getmydate mi restituisce gg/mm/aaaa.

    The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

    Come posso convertire in datetime il dato contenuto nel campo CAMPO_DATA ?

    Credo che il problema sia in questa conversione.
    ...God must love stupid people...He made so many...

    www.eurodomus.org

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ciao,premetto che è una vita che non uso sql server.
    Se hai le date in nel formato gg/mm/aaaa potresti aggiungere alla tua tabella un campo di tipo datetime e poi fai un aggiornamento di quel campo in base ai valori della data di tipo char

    codice:
    update tabella set data_tipo_date = cast(data_tipo_char as datetime)
    e poi per la differenza

    codice:
    select ....
    where
    datediff(day,data,current_timestamp) > 30
    Spero di esserti stato utile.

  5. #5
    Ciao e grazie mille innanzi tutto.

    Ho optato per cambiare il formato della data da nvarchar a smalldatetime ed utilizzare date() per prendere la data da inserire in DB.

    In questo modo mi sarà sempre facile formattare le date.

    azz......
    ...God must love stupid people...He made so many...

    www.eurodomus.org

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.