Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [SQL] Datevalue.. e l'ora?

    DATEVALUE nelle istruzioni SQL considera solo la data

    da DateValue('12/03/1985 00:10') sostanzialmente utilizza solo 12/03/1985

    se volessi fare un confronto fra due date come faccio?

    insomma...

    DateValue('12/03/1985 00:10') < DateValue('12/03/1985 01:00')

    FALSE! (sono uguali!)

    perchè considera solo da DATA e ignora l'ora

    qualcuno ha affrontato il problema?
    solutions?

    grazie a tutti come sempre
    san imente saluta

    * http://simonecingano.it *

  2. #2
    non puoi usare datediff ... datevalue, a leggere la guida di access l'orario non lo considera!!!

  3. #3
    Mi sono imbattuto in questo vecchio post, cercando di risolvere lo stesso problema.

    Io ho appena risolto usando la conversione della data testuale in numero a precisione doppia.

    WHERE (CDbl(Cdate('12/03/1985 00:10')) < CDbl(cDate('12/03/1985 01:00')))

    restituisce True.

    WHERE (CDbl(Cdate('12/03/1985')) = CDbl(cDate('12/03/1985 01:00')))

    restituisce False.

    Se CampoData è di tipo Date/Time e contiene (in Italiano) 12/03/1985 01:00, ossia #03/12/1985 01:00AM#, allora

    WHERE ([CampoData] = CDbl(cDate('12/03/1985 01:00')))

    restituisce False.

    Occorre fare attenzione alla localizzazione e ai valori nulli, ma il concetto è: ottenere il valore double della data (che è un double 8 byte già di per sè, con intero che identifica il giorno e la parte decimale la frazione di giorno).
    Il valore double della data può essere confrontato direttamente con un campo data, con risoluzione ben oltre il secondo.

    Per costruire il criterio in VBA, ecco un esempio funzionante in Access su una tabella Fatture con campo [DataGenerazioneFattura] tipizzato in data/ora :


    codice:
    'DateValue non prevede restituzione di orario, occorre escamotage per confrontare date comprendenti l'orario
    
    Dim vData as Variant
    Dim dblData as Double
    
    'forzo la data a titolo di esempio
    vData = #12/12/2012 12.12.12#
    
    If IsNull(vData) Then
        'uscita dalla routine
        'il test è superfluo in questo esempio, ma non laddove
        'il valore di vData provenga da un controllo
    Else
        dlData = CDbl(vData)
    End If
    
        DoCmd.RunSQL ("DELETE FROM Fatture WHERE ([DataGenerazioneFattura] = " & Str(dlData) & ");") ' Uso Str xé restituisce stringa numerica con "." decimale
    End If

    Saluti
    Non toccare, non funzionerà più
    niente.

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.