PDA

View Full Version : [SqlServer] Query Temporale


Joga3
01-04-2009, 15:57
Ciao ragazzi,

vi spiego il mio problema:

Ho la necessita di includere nella clausola where una condizione tale che mi tiri fuori dei record facendo riferimento alla colonna "date",
dalla data attuale(ho pensato a "getdate") -(meno) 12h o 24h inditro nel tempo.

E' possibile?

Grazie in anticipo :)

yorkeiser
01-04-2009, 16:06
Certamente

mamo139
01-04-2009, 16:09
Ciao ragazzi,

vi spiego il mio problema:

Ho la necessita di includere nella clausola where una condizione tale che mi tiri fuori dei record facendo riferimento alla colonna "date",
dalla data attuale(ho pensato a "getdate") -(meno) 12h o 24h inditro nel tempo.

E' possibile?

Grazie in anticipo :)

non basta metterci un and??

comunque se utilizzi phpmyadmin tu utilizzi i suoi form per creare una query e lui ti da il codice!

Joga3
01-04-2009, 16:11
Certamente

Come? :)

L'ambiente il db e' SQLServer 2005

yorkeiser
01-04-2009, 16:21
Premettendo la mia totale ruggine su sqlServer e premettendo che non so in che formato sono le date nella colonna date:
supponendo che le date siano già in formato data (e non una stringa), come tu stesso hai detto puoi usare la getdate(), che appunto ritorna la data del server, e sommare/decrementare tale data.
Ad esempio, se non ricordo male, getdate()-1 ritorna la data di ieri.
Queste ovviamente sono da mettere nella clausola where (eventualmente in AND con altre condizioni, se ne hai).

Esempio: il campo DATE deve essere inferiore alla data dell'altro ieri:
WHERE date < getdate()-2.

Almeno, se non ricordo male ;)

Joga3
02-04-2009, 07:57
Premettendo la mia totale ruggine su sqlServer e premettendo che non so in che formato sono le date nella colonna date:
supponendo che le date siano già in formato data (e non una stringa), come tu stesso hai detto puoi usare la getdate(), che appunto ritorna la data del server, e sommare/decrementare tale data.
Ad esempio, se non ricordo male, getdate()-1 ritorna la data di ieri.
Queste ovviamente sono da mettere nella clausola where (eventualmente in AND con altre condizioni, se ne hai).

Esempio: il campo DATE deve essere inferiore alla data dell'altro ieri:
WHERE date < getdate()-2.

Almeno, se non ricordo male ;)

Prima di tutto, ti ringrazio secondo in risposta alla tua domanda ti dico che il campo date e' di tipo "datetime" cmq ho provato ad eseguire la condizione ma sembra quasi non farci caso, mi restituisce tutti i valori e non il valore date < getdate()-n

Strano, no?

yorkeiser
02-04-2009, 09:04
Fa una prova con le funzioni year(), month() e day(), che restituiscono rispettivamente l'anno, il mese e il giorno della data che gli passi.

Quindi, DATE minore dell'altro ieri verrebbe scritta come

where year(getdate())=year(DATE) and month(getdate())=month(DATE) and day(DATE)<day(getdate())-2

Questa andrebbe raffinata (ad esempio, non funziona per mesi/anni differenti e per i primi due giorni del mese, ma almeno per i giorni dello stesso mese dovrebbe fare già una scrematura).
Controlla anche che la data del server sia giusta.
Purtroppo, non ho modo di verificarla visto che qui non ho installato SqlServer.
In caso non dovesse funzionarti neanche questa, prova a postare tutta la query, magari l'errore è altrove.

0rph3n
02-04-2009, 09:25
WHERE DATETIFF(d, NomeTabella.NomeCampoData, GETDATE()) >= 2


non testato, però a rigor di logica dovrebbe funzicare (anche perchè mi sembra di averlo già usato)!

ps:Riferimento MSDN a DATEDIFF (http://msdn.microsoft.com/en-us/library/aa258269(SQL.80).aspx)

0rph3n
02-04-2009, 09:28
dovrebbe funzionare anche

WHERE DATEADD(d, 2, NomeTabella.NomeCampoData) <= GETDATE()


Ovviamente se non ti interessa che l'estremo sia compreso basta togliere l'uguale :P

ps: Riferimento MSDN a DATEADD (http://msdn.microsoft.com/it-it/library/ms186819.aspx)

0rph3n
02-04-2009, 09:31
però anche il primo consiglio di yorkeiser dovrebbe essere corretto...

Joga3
02-04-2009, 11:54
WHERE DATETIFF(d, NomeTabella.NomeCampoData, GETDATE()) >= 2


non testato, però a rigor di logica dovrebbe funzicare (anche perchè mi sembra di averlo già usato)!

ps:Riferimento MSDN a DATEDIFF (http://msdn.microsoft.com/en-us/library/aa258269(SQL.80).aspx)

Ho fatto esattamente così, grazie mille :)

0rph3n
02-04-2009, 20:04
Ho fatto esattamente così, grazie mille :)

prego :)