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

    Query SQL Server 2000 con Datetime

    Salve a tutti,

    Ho un problemino con delle query ove entrano in gioco le
    date.

    Ho un campo in SQL Server 2000 con tipo di dati "Datetime"
    ove stipo una data che mi si presenta poi
    cosi: "18/06/2002 10.38.00"

    Se faccio una query cosi:

    SELECT * FROM TAB1 WHERE DATAMAIL LIKE '%2002%'

    mi tira fuori tutti i record del 2002

    se la faccio cosi:

    SELECT * FROM TAB1 WHERE DATAMAIL LIKE '%18/06/2002%'

    o cosi :

    SELECT * FROM TAB1 WHERE DATAMAIL LIKE '18/06/2002%'

    Non mi tira fuori nulla...

    SELECT * FROM TAB1 WHERE Convert(nvarchar(30),DATAMAIL) LIKE '18/06/2002%'

    Non mi tira fuori nulla...


    abbastanza strano non credete?

    Premetto che SQL Server è in ITA e il campo in questione lo "riempio" in questo modo

    INSERT INTO TAB1 (DataMail) VALUES (convert(datetime,'" & year(date) & "-" & month(date) & "-" & day(date) & " " & hour(time) & ":" & minute(time) & "', 102))

    Help!!!!

  2. #2
    Allora, come prima cosa ti sconsiglio vivamente l'utilizzo del LIKE su campi datetime. Data la tipologia del campo esistono funzioni apposite per la ricerca.

    La tua prima query per es.:
    SELECT * FROM TAB1 WHERE DATAMAIL LIKE '%2002%'
    andrebbe sostituita con:
    SELECT * FROM TAB1 WHERE YEAR(DATAMAIL)=2002

    Per le altre query invece è necessario capire una cosa basilare: un campo datetime è formato sia dalla data che dall'orario del giorno. Se omesso l'orario, il sistema interpreta la data come:

    gg/mm/aa 00:00:00.000

    ovvero la mezzanotte precisa della giornata (il .000 sono i millesimi di secondo).
    Se esegui una ricerca con una eguaglianza del tipo:
    SELECT * FROM TAB1 WHERE DATAMAIL='15/07/2002'
    il sistema cercherà i record che hanno data 15/07/2002 ed ora 00:00:00.000 !
    Ecco quindi il motivo per cui non potresti trovare alcun risultato.
    Puoi quindi utilizzare l'istruzione BETWEEN per ricercare i campi corretti oppure spostare l'ora in un altro campo (ed avere le date tutte con orario su mezzanotte).
    Nel tuo caso per cercare tutti i record di una particolare giornata:
    SELECT * FROM TAB1 WHERE DATAMAIL BETWEEN '15/07/2002' AND '15/07/2002 23:59:59.999'

    (nel primo parametro di BETWEEN ho omesso l'ora perché, come già detto, se omessa viene considerata la mezzanotte)

    Fammi sapere

    PS. La tua ultima INSERT può facilmente diventare:

    INSERT INTO TAB1 (DataMail) VALUES (GETDATE(), 102))

    GETDATE() restituisce data e ora attuale.

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