Sto cercando una buona istruzione SQL per selezionare tutte le righe del giorno precedente da una tabella. La tabella contiene una colonna datetime. Sto usando SQL Server 2005.
Sto cercando una buona istruzione SQL per selezionare tutte le righe del giorno precedente da una tabella. La tabella contiene una colonna datetime. Sto usando SQL Server 2005.
Risposte:
non avere tempo oggi:
SELECT dateadd(day,datediff(day,0,GETDATE()),0)
ottenere ieri non c'è tempo:
SELECT dateadd(day,datediff(day,1,GETDATE()),0)
query per tutte le righe solo da ieri:
select
*
from yourTable
WHERE YourDate >= dateadd(day,datediff(day,1,GETDATE()),0)
AND YourDate < dateadd(day,datediff(day,0,GETDATE()),0)
SELECT getdate(),dateadd(day,datediff(day,1,GETDATE()),0)
ottengo:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
Per ottenere il valore "oggi" in SQL:
convert(date, GETDATE())
Per ottenere "ieri":
DATEADD(day, -1, convert(date, GETDATE()))
Per ottenere "oggi meno X giorni": cambia -1 in -X.
Quindi per tutte le righe di ieri, ottieni:
select * from tablename
where date >= DATEADD(day, -1, convert(date, GETDATE()))
and date < convert(date, GETDATE())
Sembra che manchi la risposta ovvia. Per ottenere tutti i dati da una tabella (Ttable) in cui la colonna (DatetimeColumn) è un datetime con un timestamp, è possibile utilizzare la seguente query:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
Questo può essere facilmente modificato in oggi, il mese scorso, l'anno scorso, ecc.
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
come deve valutare DATEDIFF () su ogni riga
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
È un filo molto vecchio, ma ecco la mia opinione. Piuttosto che 2 clausole diverse, una maggiore di e una minore di. Uso la seguente sintassi per selezionare i record da una data. Se desideri un intervallo di date, le risposte precedenti sono la strada da percorrere.
SELECT * FROM TABLE_NAME WHERE
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
Nel caso precedente X sarà -1 per i record di ieri
Questo dovrebbe farlo:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
In SQL Server fai così:
where cast(columnName as date) = cast(getdate() -1 as date)
È necessario eseguire il cast di entrambi i lati dell'espressione fino alla data per evitare problemi con la formattazione dell'ora.
Se hai bisogno di controllare l'intervallo in modo più dettagliato, dovresti provare qualcosa di simile:
declare @start datetime = cast(getdate() - 1 as date)
declare @end datetime = cast(getdate() - 1 as date)
set @end = dateadd(second, 86399, @end)
Un altro modo per raccontarlo "Ieri" ...
Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))
Questo presumibilmente non funzionerà bene il 1 ° gennaio, così come il primo giorno di ogni mese. Ma al volo è efficace.
Bene, è più facile eseguire il cast della colonna datetime fino ad oggi e che confrontare.
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
subdate (now (), 1) restituirà il timestamp di ieri Il codice seguente selezionerà tutte le righe con il timestamp di ieri
Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
SELECT *
restituirà tutte le date con i loro orari originali.