2012-06-30 9 views
5

Desidero selezionare tutti i record da [Orders] che hanno uno [Submissiondate] meno di 7 giorni.Selezionare tutti i record "più giovani" di 7 giorni

Sono completamente perplesso. Questa è la query che sto eseguendo:

SELECT * FROM [Orders] WHERE ([SubmissionDate] < @SubmissionDate) 

Non funziona.

+0

Qualche anticipo? hai trovato la soluzione? –

risposta

0

Si può anche provare questo DATEDIFF

SELECT * FROM [Orders] WHERE datediff(d,SubmissionDate,GETDATE()) > 7 

dove GetDate() è la data odierna e la d è differenza in giorni

select datediff(d,'2012/06/23',GETDATE()) 

dovrebbe darvi 7, perché è di 7 giorni fa

5

Se intendi le righe con SubmissionDate tra @SubmissionDate e @SubmissionDate - 7 days, allora questo è come Vorrei implementare che in Transact-SQL:

WHERE [SubmissionDate] BETWEEN DATEADD(DAY, -7, @SubmissionDate) 
          AND @SubmissionDate 

Nota che BETWEEN implica >= e <=. Se avete bisogno di disuguaglianze severe, renderlo qualcosa di simile:

WHERE [SubmissionDate] > DATEADD(DAY, -7, @SubmissionDate) 
    AND [SubmissionDate] < @SubmissionDate 
1

Supponendo che il parametro SQL @SubmissionDate è la data (e l'ora) ora. È possibile utilizzare la seguente query che restituirà coloro [Orders]presentate negli ultimi 7 giorni:

SELECT * FROM [Orders] WHERE ([SubmissionDate] >= DATEADD(DD, -7, DATEADD(dd, 0, DATEDIFF(dd, 0, @SubmissionDate)))) 

due osservazioni importanti per questa soluzione:

  1. Time 'parte' è stato rimosso dal @SubmissionDate .
  2. Poiché non esiste una limitazione "Data a", fare include il [Orders] inviato "oggi" (fino al momento in cui viene eseguita la query).

Il seguente codice è solo per ottenere la data 'parte' solo di una data-ora (estratto da questo altro SO thread).

DATEADD(dd, 0, DATEDIFF(dd, 0, @SubmissionDate)) 
+0

Buon punto per reimpostare la parte temporale. Ma se si presume che '@ SubmissionDate' rappresenti la data e l'ora correnti, allora non c'è molto senso usare l'argomento, vero? Potresti semplicemente usare 'GETDATE()' o 'CURRENT_TIMESTAMP'. –

+0

Quello che intendo è, se l'OP * è * usando un argomento, quindi è probabile (a mio avviso) che l'argomento rappresenti un timestamp * arbitrario *, non sempre quello attuale. –

+0

@AndriyM sì Vedo il tuo punto, forse è qualcosa che l'autore può chiarire, se è inteso che il parametro '@ SubmissionDate'. alloca la data corrente (e l'ora). Bene, cerco sempre di evitare nelle query di usare direttamente data e ora fornite dal server db e di usare sempre i parametri, quindi mi sono sentito a mio agio con l'assunto che '@ SubmissionDate' aveva lo scopo di allocare la data e l'ora correnti. –

0

Prova questo

SELECT * FROM [Orders] WHERE [submission_date] < NOW() - INTERVALLO 7 GIORNO;

Problemi correlati